Chcesz upsert właściwości obiektów w tablicy dokumentuMongoDB upsert w aktualizacji element tablicy
Rozważmy dokument w zbiorach m
{ "_id" : ObjectId("524bfc39e6bed5cc5a9f3a33"),
"x" : [
{ "id":0.0, "name":"aaa"},{ "id":1.0, "name":"bbb"}
]
}
Chcesz dodać age:100
do { "id":0.0, "name":"aaa"}
. Nie tylko wiek .. Ale także przepis na upsert w elemencie tablicy {}. Więc może zawierać {age:100,"city":"amd"}
(ponieważ jestem coraz to od serwisu aplikacyjnego)
próbował ... Ale to nie działało jak wymienić cały element tablicy
db.m.update({_id:ObjectId("524bfc39e6bed5cc5a9f3a33"),
"x" : {
"$elemMatch" : {
"id" : 0.0
}
}},
{
$set : {
"x.$" : {
"age": 100
}
}
},
{upsert: true}
)
zmienił dokument (który nie chciałem)
{ "_id" : ObjectId("524bfc39e6bed5cc5a9f3a33"),
"x" : [
{ "age":100},{ "id":1.0, "name":"bbb"}
]
}
Jest to możliwe bez zmiany schematu.
Wiem, że to działa. Ale pytam, czy db.test.update ({x: {$ elemMatch: {id: 1}}}, {$ zestaw: {"x. $": {"A": 100, "b": 200, "wiek": 44}}}) działałby ?? Lub coś podobnego działa. Uwaga {"a": 100, "b": 200, "wiek": 44} może być obiektem i powinien "wstawiać" wartości w dopasowanym elemencie tablicy. – andNn
Tak, ale ** zastąp ** cały dopasowany element nowym dokumentem: '{" a ": 100," b ": 200," wiek ": 44}". I nie może "upsert" wartości, ponieważ 'upsert' jest wykonywane tylko wtedy, gdy nie znaleziono dopasowania (element w' x' nie występuje z podanym 'id'). –
>> W górę jest wykonywane tylko wtedy, gdy nie znaleziono dopasowania, nah! Właściwości dopasowanych dokumentów są aktualizowane/wstawiane – andNn