2016-11-14 9 views
0

Ich habe eine Test wie folgt json sieht Sammlung genannt: Jetzt willElemente in Array schiebt

{ 
    '_id':ObjetcId("..."), 
    'a':[ 
     { 
      id:1, 
      a1:[{x:1,y:1},{x:10,y:11},{x:10,y:12}], 
      flag:1 
     }, 
     { 
      id:2 
      a1:[{x:1,y:1},{x:10,y:11},{x:10,y:12}], 
      flag:0 
     }, 
     ] 
} 

ich ein anderes ({x:99,y:99}) Elemente in a.a1 mit Bedingung schieben, dass a.id=1, ich den Befehl versucht:

db.test.update({'_id':ObjectId('...')},{"$push":{"a.a1":{x:99,y:99}}}) 

und gibt eine Fehlermeldung zurück, die den Teil (a von a.a1) nicht zum Durchlaufen der Elemente verwenden kann. Wie sollte ich also das Element zum Array hinzufügen?

+0

Sie meinen Push an alle a.a1? – kiro112

+0

@ kiro112 nein zu allen, mit Bedingung a.id = 1 – HaiFengZeng

+0

@ kiro112 es funktioniert! Danke^_ ^. – HaiFengZeng

Antwort

1

mongodb positional/$ Der positionelle Operator $ identifiziert ein Element in einem zu aktualisierenden Array, ohne die Position des Elements im Array explizit anzugeben. Informationen zum Projizieren oder Zurückgeben eines Arrayelements aus einer Leseoperation finden Sie im $ projection-Operator.

db.test.update({ 
    _id: ObjectId('...'), 
    "a.id": 1 
}, { 
    $push: { 
     "a.$.a1": { x: 99, y: 99 } 
    } 
})