2016-12-28 2 views
0

Ich habe dieses Format in meinem dbmongodb Array von Objekt zu finden und aktualisieren

[{ 
    "birth-date": "18/12/2010", 
    "babies": [{ 
    "id":1, 
    "name": "James", 
    "age": 8, 
    }, { 
    "id":2, 
    "name": "John", 
    "age": 4, 
    }] 
}] 

so mag ich James Namen, um etwas anderes zu aktualisieren. Ich mache

Babies.update({"birth-date":date, 'babies.id': 1}, {'$set': {'babies.$.name':"something else"}}, function(err, response){ 
     res.json(response); 
    }) 

Er kehrte ok:0 etwas falsch ist mit dem zweiten Selektor ('babies.id': 1).

+0

ich Mungo weiß es nicht, aber in Mongo Mantel 'Babies.update ({"birth-date", "babies.id": 1}, ... 'gibt einen Fehler, weil' "birth-date" 'benötigt: etwas, das ist die Eigenschaft braucht einen Schlüssel (zum Beispiel' Babies. update ({"Geburtsdatum": "18/12/2010", "babies.id": 1}, ... ' – RafaelCaballero

+0

@RafaelCaballero hat meine Antwort aktualisiert, es war nur ein Tippfehler –

+0

Können Sie versuchen, den Setteil durch '$ set' zu ersetzen: {'babies. $. Name': "etwas anderes"}? – Veeram

Antwort

-1

Dokumente auf einigen Array-Eigenschaft Passend basiert, müssen Sie elemMatch $

Babies 
    .update({ babies: {$elemMatch:{id : 1}} }, {'$set': {name:"something else"}, function(err, response){ 
     res.json(response); 
    }) 

Check this out: https://docs.mongodb.com/v3.2/reference/operator/query/elemMatch/

+0

Dies ist nur eine Bedingung. Ich brauche Datum und Baby ID. –

+0

Sie können beliebig viele Bedingungen hinzufügen, wie bei jeder anderen Abfrage auch. Babys .update ({babys: {$ elemMatch: {id: 1}}, 'Geburtsdatum': "18/12/2010"}, {'$ set': {name: "etwas anderes"} , Funktion (Fehler, Antwort) { Res.json (Antwort); }) –

+0

$ elemMatch wird hier nicht benötigt. Es wird verwendet, wenn Sie mehrere Bedingungen benötigen. Wenn du nur Gleichheit brauchst, wie in deinem Fall, ist '' babies.id ': 1' perfekt. Tatsächlich habe ich es in mongo 'db.collection.update ({"birth-date": "18/12/2010 "," babies.id ": 1}, {'$ set': {name: 'something'}})' und es funktioniert gut, wobei 'collection' das Dokument enthält. – RafaelCaballero

Verwandte Themen