Ich frage mich, wie kann ich das Element in einem solchen Array in Mongo DB ändern. Sprich die Sammlungen ist wie folgt:Mongo DB modifizieren Elemente in verschachtelten Arrays
{
"_id" : ObjectId("xxxxxxxxxxxxxxxx"),
"user_info" : {
"user_name" : "joe",
},
"portfolio" : [
{
"market_symbol" : "NASDAQ:GOOGL",
"details" : [
{
"amount" : 100,
"purchased_price" : 810.25,
"date_of_purchase" : "20170210 212426"
},
{
"amount" : 100,
"purchased_price" : 810.25,
"date_of_purchase" : "20170210 212426"
},
{
"amount" : 200,
"purchased_price" : 900.0,
"date_of_purchase" : "20170210 212426"
}
]
},
{
"market_symbol" : "NYSE:BABA",
"details" : [
{
"amount" : 200,
"purchased_price" : 80.0,
"date_of_purchase" : "20170210 212426"
},
{
"amount" : 333,
"purchased_price" : 86.11,
"date_of_purchase" : "20170210 212426"
}
]
}
]
Ich versuche, den Wert von amount
in "portfolio:market_symbol":"NASDAQ:GOOGL"
zu ändern, wo die purchased_price
ist 900
und ich möchte die 200 bis 300
so das Segment setzen sollten sehen wie folgt nach der Änderung:
"portfolio" : [
{
"market_symbol" : "NASDAQ:GOOGL",
"details" : [
{
"amount" : 100,
"purchased_price" : 810.25,
"date_of_purchase" : "20170210 212426"
},
{
"amount" : 100,
"purchased_price" : 810.25,
"date_of_purchase" : "20170210 212426"
},
{
"amount" : 300,
"purchased_price" : 900.0,
"date_of_purchase" : "20170210 212426"
}
]
},
I $elemMatch
in mongo zu verwenden versucht shell
db.Users.update({"user_info.user_name":"joe","portfolio":{$elemMatch:{"market_symbol":{$eq:"NASDAQ:GOOGL"},"details.purchased_price":{$eq:900}}}},{$set:{"portfolio.$.details.0.amount":300}})
Es scheint, dass die Abfrage immer den gesamten Abschnitt von "portfolio:market_symbol":"NASDAQ:GOOGL"
zurückkehren, weil die 0
in {$set:{"portfolio.$.details.0.amount":300}}
in details
das erste Array modifiziert, deren purchased_price
ist 810.25
, und nicht als das, was ich die $elemMatch
erwarten, dass ich geben (das dritte Element aus dem Array, dessen purchased_price
ist 900
).
Gibt es eine Möglichkeit, dass ich diese verschachtelte verschachtelte Array ändern kann, anstatt aus der ganzen Sache ziehen, um die Daten in meinem Programm ändern, dann die ganze Sache wieder schreiben?
Bitte helfen Sie, danke.