5

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

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

方法签名:

Document#update(文档,选项,回调)

示例代码:

奇怪的Car.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

有人可以解释猫鼬提供的示例代码吗?

4

3 回答 3

4

对我来说,关键是正确的参数。您需要提供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();
});
于 2014-06-15T17:45:08.507 回答
3

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

此外,有些人不理解这里的问题。我们正试图调用update一份文件。执行更新时不查询文档。有一个区别,Mongoose 没有很好地记录它。

这是文档所说的:关于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 选项:

  • 安全(布尔)安全模式(默认为模式中设置的值(真))
  • upsert (boolean) 如果文档不匹配,是否创建文档 (false)
  • multi (boolean) 是否应该更新多个文档 (false)
  • runValidators:如果为真,则在此命令上运行更新验证器。更新验证器根据模型的模式验证更新操作。
  • setDefaultsOnInsert:如果 this 和 upsert 为真,如果创建新文档,mongoose 将应用模型模式中指定的默认值。此选项仅适用于 MongoDB >= 2.4,因为它依赖于 MongoDB 的 $setOnInsert 运算符。
  • strict(布尔值)覆盖此更新的严格选项
  • 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}
})
于 2016-10-14T19:23:35.943 回答
1

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

因此,假设您有一个“汽车”集合,并且您想查找所有具有 3 个轮子的文档(所有汽车),并增加该值,使这些汽车具有 4 个轮子。在这种情况下,“doc”是 {wheels:3},它返回集合中的所有三轮汽车。这是 MongoDB shell 中的基本查询:

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

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

于 2013-09-18T20:18:33.167 回答