我正在使用Mongoose和Node.js与数据库通信。我有文档的Id,我需要更新本文档的集合。这就是我想要做的事情:
taskModel.update({
_id: ObjectId(taskid), 'results.date': new Date(date) },
{ $set: { 'results.done': true }},
callback);
这就是我获取ObjectId方法的方法
var mongoose = require('mongoose');
var ObjectId = mongoose.Types.ObjectId;
这是db返回的内容:
{ ok: 1, nModified: 0, n: 0, lastOp: Timestamp
{ _bsontype: 'Timestamp', low_: 0, high_: 0 }, electionId: 565e1be0d66545dcd16d55ce }
它不会更新文档。
这就是文件的样子:
{
"_id" : ObjectId("5668a45ccc23cef6c375ddd4"),
"userid" : "test",
"title" : "to do groceries",
"source" : "Walmart",
"results" : [
{
"date" : ISODate("2015-12-09T21:56:51.076Z"),
"done" : false
}
]
}
日期是正确的。 ObjectID的问题显然是。谷歌没有帮助。请帮忙。
答案 0 :(得分:0)
在您的架构中,results
是一个数组,但您正在访问results.date
,因此请将其替换为results[0].date
,然后才能生效。
答案 1 :(得分:0)
我只是想通了。我不得不使用位置运算符$。
taskModel.update({
_id: ObjectId(taskid), 'results.date': new Date(date) },
{ $set: { 'results.$.done': true }},
callback);
答案 2 :(得分:0)
是@Hamabama,您必须使用位置运算符$ 。但您应该使用多选项来更新所有文档。
taskModel.update({
_id: ObjectId(taskid), 'results.date': new Date(date) },
{ $set: { 'results.$.done': true }},
{ multi: true },
callback);