我正在查看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提供的示例代码吗?
答案 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选项:
那里没有任何与该示例相对应的内容......没有提到{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中,您可以为选项和回调函数添加其他参数,但这是基本想法。