我有一个典型的架构和模型:
var mongoose = require('mongoose'); var userSchema = new mongoose.Schema({ email: String, password: String, profile: { name: String, surname: String, photo: String }, stats: { lastLogin: { type: Date, default: Date.now }, loginCount: Number, lastIP: String }, source: String, deleted: Boolean, dateCreated: { type: Date, default: Date.now } }); mongoose.model('User', userSchema);
当我执行此更新时,它仅在定义回调时才有效,否则仅执行但数据库中的值未更改:
User.update({email:'foo@bar.com'}, {$inc: {'stats.loginCount': 1}});
这有效:
User.update({email:'foo@bar.com'}, {$inc: {'stats.loginCount': 1}}, function() {});
这是一个错误吗?我没有在文档中看到是否需要回调,但是要求这样做很奇怪……我认为我在这里缺少了一些东西。
注意:我通过电子邮件匹配以测试建议,我在NodeJS v0.8.17中使用猫鼬v3.5.4,并具有简单的Express v3.0.6设置。
提前致谢。
update用猫鼬打电话的正确方法如下:
update
User.update(query, update).exec(callback);
这样,您将可以跳过callback:
callback
User.update(query, update).exec();
打电话时
User.update(query, update)
它返回一个查询对象。
在查询数据库时,它非常有用,因为您可以在执行查询对象之前对其进行操作。例如,您可以limit为find查询指定一个:
limit
find
User.find(query).limit(12).exec(callback);
Update 使用相同的机制,尽管在这里没有那么有用。
Update