2013-08-21 26 views
3

我在这里看一下例子文档#更新的猫鼬:如何在Mongoose中使用Document#更新?

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

方法签名:

文档#更新(DOC,期权,回调)

示例代码:

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

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

然后在示例中它们将{w:1}作为选项传递,但根据Model.Update,“w”不是有效的选项。唯一有效的选项应该是:安全,插入,多重,严格。

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

有人能解释由猫鼬提供的示例代码?

回答

1

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

所以,让我们说,你有一个“汽车”集合,你想发现了3轮的所有文件(全车),并增加该值,使那些车有4个轮子。在这种情况下,“doc”是{wheels:3},它返回集合中的所有三轮车。这里是MongoDB的外壳基本查询:

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

在猫鼬,你可以添加选项和一个回调函数的附加参数,但是这是基本的想法。

+0

我认为这相当于http://mongoosejs.com/docs/api.html#model_Model.update而不是http:// mongoosejs。 com/docs/api.html#document_Document-update –

1

对我来说关键是正确的参数。您需要提供参数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(); 
}); 
+0

这真的很有帮助。浪费了很多时间,因为我忘了执行部分。 –

1

在我看来,像文件是错误的。

此外,有些人不明白这里的问题。我们正尝试在文档上拨打update。在执行更新时不要查询文档。有一个区别,并且它不是很好的被猫鼬记录。

这里是什么文件说:约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(布尔)是否创建文档,如果它不匹配(假)
  • 多(布尔)多个文件是否应更新(假)
  • runValidators:如果为true,则在此命令上运行update验证程序。更新验证器根据模型的模式验证更新操作。
  • setDefaultsOnInsert:如果this和upsert为true,如果创建了新文档,mongoose将应用模型模式中指定的默认值。该选项仅适用于MongoDB> = 2.4,因为它依赖于MongoDB的$ setOnInsert运算符。
  • 严格(布尔)覆盖此更新strict选项
  • 覆盖(布尔)禁用更新-only模式,让您覆盖DOC(假)

没有什么那里,与实例对应... {w : 1}是这里的错误。忽略那部分。

但是,您可以在有或没有这些选项的情况下使用它。

所以它看起来像这样不带任何选项
weirdCar.update({$inc: {wheels:1}}, function(err, updated) { // 'updated' is the object: {ok: number, nModified: number, n: number} })

+0

有没有什么办法可以让我们在回调中获得更新的文档?我想在文档中推送一个新对象,并希望在回调中返回该对象 – AnkitNeo

相关问题