查询更新数组中的错误条目

时间:2017-07-27 13:16:15

标签: node.js mongodb mongoose mongodb-query

我在我的聊天应用程序中使用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_iduser_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 {

    }
});

1 个答案:

答案 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] });
                        }
                    });

- 感谢