猫鼬:更新不起作用

时间:2013-04-01 17:53:13

标签: node.js mongodb mongoose

基本理念是这样的:

model.find({}, function(err, docs) {
    docs.forEach(function(doc) {
        // update it with whatever new object
        model.update({"category":"cat1"});
    });
});

现在我的问题是任何类型的更新/保存都不起作用。我可以用模型找到,计数等。我已尝试doc.save()model.findOneAndUpdate(),使用特定字段的$set参数,它们不起作用。我去了mongo shell并用参数键入了update命令,它运行了。

有一段时间它确实有效,当我尝试使用var m = new model({..})m.save()来自find()的回调函数之外放置新文档时。但是我需要按照他们的字段查找文档,并更新它们。

我觉得我错过了一些非常基本的东西,有人可以帮助我吗?

编辑:稍后在代码中调用mongoose.disconnect()。所以查询没有执行。

2 个答案:

答案 0 :(得分:2)

导致此问题的另一种可能性是当您使用混合类型时,如Schema.Types.Mixed中所示。如果您只更新混合字段,那么Mongoose不知道您已更新该字段。所以你需要致电markModified

我最近遇到了这个问题,发现发生的事情是痛苦的。

答案 1 :(得分:0)

除非它只是一个拼写错误,否则你正在对错误的对象进行更新。你可能想做

model.find({},function(err,docs){  docs.forEach(function(doc){  doc.update({/ fields here /});  }); });

以上回答不正确。

修改

在仔细思考之后,你为什么要做find?你应该能够在没有它的情况下更新你的装备。查看API docs for update

model.update({}, {field1: 'updated value'}, function(err) {});