无法在数组下的对象上设置值

时间:2017-12-29 09:29:42

标签: mongodb

我有这样的数据集

{
    "_id" : ObjectId("5a45f6da3e6de20efc61ecc8"),
    "userid" : "5a20eb5bcdacc7086ce77427",
    "test" : [ 
        {
            "sid" : "5a20ec53cdacc7086ce7742b",
            "sname" : "dev",
            "activity" : "Message",
            "isread" : 0,
            "timestamp" : 1514535070925
        }, 
        {
            "sid" : "5a20ec53cdacc7086ce7742b",
            "sname" : "dev",
            "activity" : "Message",
            "isread" : 0,
            "timestamp" : 1514535356213
        }
    ],
    "__v" : 0
}

现在我无法修改' isread'值从0到1。 我写的是:

db.Collection.update({'userid': req.body.userid, 'notifications.timestamp': '1514535356213'}, {$set:{'isread': parseInt(1)}}, {new: true}, function(error, result) {
                        if(error) {
                            console.log(error);
                        } else {
                            console.log(result);
                            //I am getting this result i.e {
                                                           "ok": 0,
                                                           "n": 0,
                                                           "nModified": 0
                                                           }
                        }
                    });

我不知道为什么我的价值没有更新。 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

尝试

> db.coll3.update({
    'userid': '5a20eb5bcdacc7086ce77427'
}, {
    $set: {
        'test.$[elem].isread': 1
    }
}, {
    multi: true,
    new: true,
    arrayFilters: [{
            'elem.timestamp': {
                $eq: 1514535356213
            }
        }
    ]
})
WriteResult({
    "nMatched": 1,
    "nUpserted": 0,
    "nModified": 1
})

使用findAndModify

db.coll3.findAndModify({query:{
    'userid': '5a20eb5bcdacc7086ce77427'
}, update:{
    $set: {
        'test.$[elem].isread': 1
    }
}, 
    new: true,
    arrayFilters: [{
            'elem.timestamp': {
                $eq: 1514535356213
            }
        }
    ]
})

有多种方法可以执行此类操作。希望这有帮助