如何通过id查找文档并更新它的设置?

时间:2015-12-12 20:29:53

标签: node.js mongodb mongoose

我正在使用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的问题显然是。谷歌没有帮助。请帮忙。

3 个答案:

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