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.
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. –