2017-09-27 2 views
0

Quelqu'un peut-il me aider le cas ci-dessous dans MongoDB:Trouver Modifier et insérer dans la même collection de MongoDB

  1. documents trouver avec une condition de collection A. (permet de dire que nous avons 2 documents)
  2. Modifiez ces 2 documents, puis insérez-les dans la même collection A, sans les documents originaux 2 dérangeants.

L'agrégation ne supporte pas la fusion dans la même collection, je l'ai obtenue par simple javascript, mais nous avons besoin de MapReduce.

Ci-dessous mon script simple:

db.col1.find({ 
    "field1": "value" 
}).forEach(function(d1) { 
    d1.f2 = NumberInt(d1.f2/10); 
    db.col1.save(d1) 
}) 
+0

Pourquoi avez-vous besoin de MapReduce? – chridam

+0

Possible dupe https://stackoverflow.com/questions/29487351/how-to-convert-string-to-numerical-values-in-mongodb – chridam

+0

Comme je l'ai mentionné auparavant, je ne veux pas déranger les données d'origine, même si elle est l'agrégation puis la sortie remplace les données de la collection au lieu de fusionner. S'il s'agit d'un script Java simple, le transfert de données se produira entre les serveurs App & DB. Je veux donc qu'il soit exécuté dans la carte pour s'exécuter sur DB Server. – JohnWick

Répondre

0

Avant d'enregistrer le d1 document modifié, changer son _id avec un nouveau ObjectId(), ce insérera nouveau d1 au lieu de mettre à jour l'existant:

db.col1.find({"field1" : "value"}).forEach(function(d1) 
{ 
    d1.f2 = NumberInt(d1.f2/10); 
    d1._id = ObjectId(); 
    db.col1.save(d1); 
}) 
+0

Hey merci pour la réponse rapide, mais malheureusement je ne cherche pas cette approche. J'ai besoin de la même chose à réaliser en utilisant Mapreduce. Je vous remercie. – JohnWick