2

用户集合:

{

"_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" 它只是更新第一个找到的子文档我想我一直在搜索这里

使用 $ 更新数组在 mongodb-native nodejs 中不起作用

https://docs.mongodb.com/manual/reference/operator/update/positional/

使用 NodeJS、MongoDB 和 Monk 更新数组项

4

1 回答 1

2

尝试使用$elemMatch运算符来使用这样的查询

{
   _id: ObjectId("5785d10570d6c39923d476cf"), 
   "transaction": {
      "$elemMatch": {     
        "amount": 0, 
        "type": "TYPE1", 
        "id": "nhaa94" 
   }
}
于 2016-08-22T04:32:53.673 回答