2016-04-28 8 views
1

In Mongodb-Datenbank habe ich Probleme, ein Feld abzufragen. Meine Sammlung Benutzer sieht wie folgt aus:Abfrage eingebetteter Array-Felder in einem Dokument in Mongodb

{ 

"_id" : "sam", 
"_password" : "t", 
"data" : [ 
    { 
     "_id" : "hp", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    }, 
    { 
     "_id" : "tt", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    } 
]}, 

{ 

"_id" : "bob", 
"_password" : "w", 
"data" : [ 
    { 
     "_id" : "hello", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    }, 
    { 
     "_id" : "world", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    } 
] 
} 

Ich brauche die nodeList/edgeLis t aus diesen abrufen und auch die edgeColor in Optionen eine bestimmte _id gegeben ändern. Zum Beispiel: _ id : "bob".

Ich habe ein paar Dinge versucht, konnte aber nicht die Ausgabe bekommen.

db.users.find({ '_id': 'sam' , "users.data._id" : "hp"}, {}) 
db.users.findOneAndUpdate({"_id":"sam", "users.data._id": "hp"},{$addToSet:{"users.data.nodeList":{"nodeId":1,"nodeName":"Bellanduru", "lat":43.12, "long":33.43,"stock":3}}}) 

Bitte sagen Sie mir, was los ist.

+0

Denken Sie nicht, dass dies machbar ist i n eine einzelne Abfrage. Sie müssen das Dokumentobjekt des inneren Knotens im Datenarray abrufen und den Wert dafür festlegen, es dann im Benutzerdokument festlegen und dann Ihre Aktualisierungsabfrage mit dem aktualisierten Benutzerdokument ausführen. Eine Sache, die mir aufgefallen ist, dass die Anfrage falsch war, ist "Benutzer". zu deinen Schlüsseln. Sie müssen dies nicht tun, da Sie die Benutzersammlung bereits anpassen, wenn Sie "db.users ...." eingeben. –

Antwort

0

erklären Sie Kollektionsnamen mit diesem db.users in ausgewählten db

und wählen Sie users Sammlung so notwendig angeben nicht Abfrage in

zum Beispiel diese "users.data._id" mit diesem "data._id"

ersetzen ersetzen Ihre querys wie dies

db.users.find({ '_id': 'sam' , "data._id" : "hp"}, {}) 
db.users.findOneAndUpdate({"_id":"sam", "data._id": "hp"},{$addToSet:{"data.nodeList":{"nodeId":1,"nodeName":"Bellanduru", "lat":43.12, "long":33.43,"stock":3}}}) 
Verwandte Themen