如何在Mongoose中使用Document#update?

时间:2013-08-21 05:44:33

标签: mongodb mongoose

我正在查看Mongoose中Document#update的示例:

http://mongoosejs.com/docs/api.html#document_Document-update

方法签名:

  

文档#update(doc,options,callback)

示例代码:

  

weirdCar.update({$ inc:{wheels:1}},{w:1},回调);

文档说第一个参数应该是“doc”但是doc究竟是什么?我认为doc应该只是一个将键映射到要更新的新值的对象(默认情况下使用$ set)。在代码示例中,他们试图将轮子增加1。

然后在示例中,它们将{w:1}作为选项传递,但根据Model.Update,“w”不是有效选项。唯一有效的选项应该是:safe,upsert,multi,strict。

http://mongoosejs.com/docs/api.html#model_Model.update

有人可以解释一下Mongoose提供的示例代码吗?

3 个答案:

答案 0 :(得分:2)

对我而言,关键是正确的参数。您需要提供callback参数或在结果上调用.exec()才能生效。

var Product = mongoose.model('product', mongoose.Schema({
    name: String
}));
Product.findById('539dceccc61fa4950b43423a', function (err, product) {
    product.update({ name: 'test' }, null, function(err, numberAffected, raw) { });
    //or
    product.update({ name: 'test' }).exec();
});

答案 1 :(得分:2)

在我看来,文档是错误的。

此外,有些人不明白这个问题。我们正在尝试在文档上调用update。执行更新时不查询文档。这是有区别的,并且Mongoose没有很好地记录。

以下是文档说明的内容:about document.update

示例: weirdCar.update({$inc: {wheels:1}}, { w: 1 }, callback);

<强>参数:

doc <Object>
options <Object>
callback <Function>

有效选项

same as in Model.update

让我们来看看Model.updates选项 ...

Model.updates选项:

  • 安全(布尔)安全模式(默认为模式中设置的值(true))
  • upsert(boolean)是否创建doc,如果它不匹配(false)
  • multi(boolean)是否应更新多个文档(false)
  • runValidators:如果为true,则在此命令上运行update validators。更新验证程序根据模型的架构验证更新操作。
  • setDefaultsOnInsert:如果this和upsert为true,则mongoose将应用模型架构中指定的默认值(如果创建了新文档)。此选项仅适用于MongoDB&gt; = 2.4,因为它依赖于MongoDB的$ setOnInsert运算符。
  • strict(boolean)会覆盖此更新的严格选项
  • overwrite(boolean)禁用仅更新模式,允许您覆盖doc(false)

那里没有任何与该示例相对应的内容......没有提到{w : 1}w任何内容......所以是的,似乎文档是错误的。

但是,您可以使用或不使用这些选项。

所以看起来没有任何选项

weirdCar.update({$inc: {wheels:1}}, function(err, updated) {
      // 'updated' is the object: {ok: number, nModified: number, n: number}
})

答案 2 :(得分:1)

Mongoose api基于底层的MongoDB查询结构。在这种情况下,“doc”指的是匹配您要更新的某些文档的标准。 MongoDB文档非常清楚地解释了这一点: http://docs.mongodb.org/manual/core/write-operations/#update

所以,假设你有一个'汽车'系列,你想要找到所有有三个轮子的文件(所有汽车),并增加这个价值,这样那些汽车就有4个轮子。在这种情况下,“doc”是{wheels:3},它返回集合中的所有三轮车。这是MongoDB shell中的基本查询:

> db.cars.update( { wheels : 3 }, { $inc : { wheels : 1 } } ); 

在Mongoose中,您可以为选项和回调函数添加其他参数,但这是基本想法。

相关问题