我有一个像这样的数据集:
{
"_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)
任何人都建议我,我做错的地方不合适。真的很感谢任何帮助。
答案 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);