Par exemple, j'ai une table de balises en mongo, et le modèle de données est le suivant
{
name: String,
hot: {
type: Number,
default: 0
},
create_at: {
type: Date,
default: Date.now
}
}
Maintenant, j'ai un tableau de noms de balises, tels que ['mongoDB', 'node.js', 'mysql'],
Je souhaite mettre à jour la popularité par lots, et s'il s'avère qu'une telle balise n'existe pas, insérez-le, implémentez quelque chose comme
mongo.tags.update({
name:{
$in:['mongoDB','node.js','mysql']
}
},{
$inc:{
hot:1
}
},{
upsert: true,
multi:true
})
Une telle opération, mais maintenant, lorsque j'exécute cette commande, des données vides sont ajoutées
La façon dont je l'implémente maintenant est de faire d'abord une requête, de mettre à jour celles qui peuvent être interrogées et d'insérer celles qui ne peut pas être interrogé, mais une telle opération nécessite de parcourir le tableau de balises plusieurs fois à partir du code, et les performances ne sont pas bonnes. Je voudrais demander si des experts ont une meilleure solution.
1. Votre relevé d'opération de mise à jour est OK ;
2. Ce que vous avez dit à propos de l'ajout de données vides est dû au fait qu'aucun document répondant aux conditions n'a été trouvé et que upsert a été défini sur true, donc un document contenant un champ chaud a été inséré.La conférence du groupe d'utilisateurs de la communauté chinoise MongoDB 2017 à Pékin arrive bientôt ! Scannez le code QR pour vous inscrire !
Il devrait être possible d'utiliser upsert dans mongodb
upsert({},{},true) true signifie écrire s'il n'y en a pas, et mettre à jour s'il y en a
Vous pouvez vous référer au forum d'assistance officiel :
http:// ; forum.foxera.com/mongo...