node.js mongodb обновляет только первый найденный вложенный документ в массиве
Коллекция пользователей:
{
"_id" : ObjectId("5785d10570d6c39923d476cf"),
"name" : "BB Cafe",
"transaction" : [
{
"id" : "m69bkn",
"type" : "TYPE1",
"amount" : 0,
},
{
"id" : "nhaa94",
"type" : "TYPE1",
"amount" : 0,
}
]
}
обновить заявление
var mongodbObjectID = require('mongodb').ObjectID;
db.collection('user').update(
{_id:new mongodb.ObjectID("5785d10570d6c39923d476cf"),
"transaction.amount":0,
"transaction.type":"TYPE1",
"transaction.id":"nhaa94"
}, {$set:{"transaction.$.amount":0.6}}, {w:1}, function(err, resultUpdate) {
}
Это обновлено до transaction.id = "m69bkn"
вместо "nhaa94"
Это просто обновить первый найденный поддокумент, который, я думаю, я искал здесь в SO, как
Обновление массива с $ не работает в mongodb-native nodejs
а также
https://docs.mongodb.com/manual/reference/operator/update/positional/
а также
Обновление элемента массива с использованием NodeJS, MongoDB & Monk
1 ответ
Решение
Попробуйте использовать такой запрос, используя оператор $elemMatch
{
_id: ObjectId("5785d10570d6c39923d476cf"),
"transaction": {
"$elemMatch": {
"amount": 0,
"type": "TYPE1",
"id": "nhaa94"
}
}