如何在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选项:
没有什么与那个例子相对应...... {w : 1}
在这里是错误的。 忽略那部分。
但是,您可以在有或没有这些选项的情况下使用它。
所以它看起来像没有任何选择
weirdCar.update({$inc: {wheels:1}}, function(err, updated) { // 'updated' is the object: {ok: number, nModified: number, n: number} })
上一篇: How to use Document#update in Mongoose?
下一篇: in mongoose, how to select the fields in a array property