如何在Mongoose中使用Document#更新?

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

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

方法签名:

文档#更新(文档,选项,回调)

示例代码:

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

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


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

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

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

在Mongoose中,你可以为选项和回调函数添加额外的参数,但这是基本的想法。


对我来说关键是正确的参数。 您需要提供callback参数或调用结果中的.exec()以使其.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();
});

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

此外,有些人在这里不了解这个问题。 我们正在尝试致电一个DOCUMENT的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(boolean)是否创建文档,如果不匹配(false)
  • multi(boolean)是否应该更新多个文档(false)
  • runValidators:如果为true,则在此命令上运行更新验证器。 更新验证器根据模型的模式验证更新操作。
  • setDefaultsOnInsert:如果this和upsert为真,如果创建了新文档,mongoose将应用模型模式中指定的默认值。 该选项仅适用于MongoDB> = 2.4,因为它依赖于MongoDB的$ setOnInsert运算符。
  • 严格(布尔)覆盖此更新的严格选项
  • 覆盖(布尔)禁用更新模式,允许您覆盖文档(false)
  • 没有什么与那个例子相对应...... {w : 1}在这里是错误的。 忽略那部分。

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

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

    链接地址: http://www.djcxy.com/p/60685.html

    上一篇: How to use Document#update in Mongoose?

    下一篇: in mongoose, how to select the fields in a array property