2016-03-30 16 views
0

Ich habe ein Dokument mit dem Array von Objekten und ein Objekt enthält mehrere Objekte Ich möchte inneres Objekt mit $set aktualisieren, aber habe kein Glück. kann mir jemand einen Hinweis geben, damit ich es lösen kann ?.Mongoose: Update funktioniert nicht in verschachtelten Array-Objekt

Das ist mein Ziel:

{ 
    "_id": ObjectId("56fbfafdf86fa6161911d104"), 
    "site": "xyz", 
    "adsPerCategory": NumberInt(2), 
    "sampledAt": ISODate("2016-03-30T16:12:45.138+0000"), 
    "items": [ 
    { 
     "id": "4563873", 
     "content": { 
     "title": "WATER DISTILLERS", 
     "body": "Perfect to save money.", 
     } 
    }, 
    { 
     "id": "4563s23232873", 
     "content": { 
     "title": "Cola water", 
     "body": "Perfect for body.", 
     } 
    } 
    ] 
} 

I body aktualisieren möchten.

für jetzt habe ich single object gegeben, aber es kann mehrere sein.

Hier ist, was ich

versucht
models.Sample.update(
    { 
    _id: samples._id 
    }, 
    '$set': { 
    'items.0.content.body': body.description 
    }, 
    function(err, numAffected) { 
    console.log(err); 
    console.log('Affected....', numAffected); 
    } 
); 

Es funktioniert gut, wenn ich 0 setzen, aber ich möchte es dynamisch machen.

Wie 'items.index.content.body': body.description

danken Ihnen.

+0

Sie meinen, Sie möchten alle Elemente mit dem gleichen Körperinhalt aktualisieren? –

+0

Nein, Objekte haben mehrere Objekte und jedes Objekt hat einen anderen Körperinhalt , so dass ich 'foreach' zum Iterieren und Aktualisieren des gesamten Körpers mit unterschiedlichen Inhalten – abdulbarik

+0

habe ich nur Körper Wert aktualisiert. – abdulbarik

Antwort

0

Ich denke, dass Sie so etwas tun können.

models.Sample.find({ _id: ObjectId(samples._id) }) 
    .forEach(function (doc) { 
     doc.items.forEach(function (element, index, array) { 
      items[index].content.body = body.description; 
     }); 
    models.Sample.save(doc); 
}); 
+0

Ich habe das bereits versucht, aber nicht funktioniert, mit diesem wird alles aktualisiert außer Array-Elemente – abdulbarik

+0

können Sie versuchen, Einstellung 'doc.markModified ('doc.items')' und sehen, ob es hilft? Stellen Sie es einfach vor 'models.Sample.save (doc);' –