更新对象Mongodb下特定对象的数组

时间:2018-07-27 07:13:07

标签: mongodb mongoose

我有一个像这样的数据集:

{
    "_id" : ObjectId("5aded60f6e89ea0e60e00e59"),
    "mail" : {
        "count" : 1,
        "messages" : [ 
            {
                "message" : "xyz",
                "timestamp" : ISODate("2018-07-25T10:51:15.915Z"),
                "view" : 0
            },
            {
                "message" : "abc",
                "timestamp" : ISODate("2018-07-26T10:51:15.915Z"),
                "view" : 0
            }
        ]
    }
}

现在,我必须在第一个对象“ timestamp”:“ ISODate(“ 2018-07-25T10:51:15.915Z”)“上从0-> 1更新视图。

为此,我正在编写代码,但是没有用。这是我的代码:

db.Collection.updateOne({'_id': ObjectId("5aded60f6e89ea0e60e00e59"), 'mail.messages.timestamp': 'ISODate("2018-07-25T10:51:15.915Z")'}, {$set: {'mail.messages.$.view': 1}})
.then(data => {
    console.log(data)
})
.catch(error => {
    console.log(error)
}) 



//I run this query on my mongodb shell and there it works perfectly. But when i write same query on my node js then it returns the error that is "typeError: callback.apply is not a function. This error arises when i mention false, true on my query at last i.e 
db.Collection.updateOne({"_id": ObjectId("5aded60f6e89ea0e60e00e59"), "mail.messages.timestamp": "2018-07-26T10:51:15.915Z"}, {$set: {"mail.messages.$.view": 1}}, false, true)

任何人都建议我,我做错的地方不合适。真的很感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您希望查找的日期前后有单引号。因此,'ISODate("2018-07-25T10:51:15.915Z")'只是用作字符串,应该只是ISODate("2018-07-25T10:51:15.915Z")

答案 1 :(得分:0)

db.collection.update({_id :ObjectId("5aded60f6e89ea0e60e00e59"), "mail.messages.message" : "xyz"}, 
        {$set: {"mail.messages.$.view": 1}
        false, true);