我有这样的数据集
{
"_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
}
}
});
我不知道为什么我的价值没有更新。 任何帮助表示赞赏
答案 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
}
}
]
})
有多种方法可以执行此类操作。希望这有帮助