我在我的聊天应用程序中使用mongoose数据库来获取历史记录并根据用户界面进行更新。
我在数据库中跟踪对象。
{
"_id" : ObjectId("5979dbd157634341fc8cb03a"),
"count" : 3,
"room_status" : true,
"room_id" : "s7d8a9s7d8a90sd",
"users" : [
{
"user_status" : true,
"user_id" : 1501158353821
},
{
"user_id" : 1501158361890,
"user_status" : true
},
{
"user_id" : 1501158369102,
"user_status" : true
}
],
"__v" : 0
}
从请求中我获取数据{room_id: "s7d8a9s7d8a90sd", "user_id":1501158361890 }
。根据{{1}}和room_id
,我必须更新user_id
和user_status : false
等对象。
注意:如果count increased by -1
已经错误,则无需将计数减少1。
我尝试了跟随查询让我知道furthure选项。
user_status
我想输出
room.update({
"room_id": req.body.room_id,
"users.user_id": req.body.user_id,
'users.user_status': true
}, {
'$set': {
'users.$.user_status': false
},
'$inc': { count: -1 }
}, function(err, resData) {
if (err) {
} else {
}
});
答案 0 :(得分:0)
我得到了答案。但是,任何人都可以解释上述查询和$elemMatch
之间的差异。
room.update({
"room_id": req.body.room_id,
"users":{
$elemMatch : {
"user_id": parseInt(req.body.user_id),
"user_status" : true
}
}
}, {
'$set': {
'users.$.user_status': false
},
'$inc': { count: -1 }
}, function(err, resData) {
if (err) {
return res.status(500).send({ status: false, message: "Error Occour to Processing Database" });
} else {
result[0]['presenter'] = false;
return res.status(200).send({ status: true, message: "User left Successfully", data: result[0] });
}
});
- 感谢