没有回调的猫鼬更新
Posted
技术标签:
【中文标题】没有回调的猫鼬更新【英文标题】:Mongoose update without callback 【发布时间】:2013-01-14 20:27:27 【问题描述】:我有一个典型的架构和模型:
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 设置。
提前致谢。
【问题讨论】:
【参考方案1】:用猫鼬调用update
的正确方法如下:
User.update(query, update).exec(callback);
这样你就可以跳过callback
:
User.update(query, update).exec();
当你打电话时
User.update(query, update)
它返回一个query object。
查询数据库时它非常有用,因为您可以在执行查询对象之前对其进行操作。例如,您可以为 find
查询指定 limit
:
User.find(query).limit(12).exec(callback);
Update
使用相同的机制,尽管它在那里用处不大。
【讨论】:
你说的完全正确,我现在在 Mongoose 的文档中看到了关于此的注释 (gan.so/diUO)。昨天我瞎了,谢谢指点。 虽然令人困惑的是,如果您提供回调,查询会立即执行而不是返回查询对象。我认为他们需要对此进行更改或在文档中进行备注。 此功能已针对find
操作进行了详细记录(请参阅API docs 和guide),但不适用于update
。从update
API docs 看来callback
是必需参数,但它不是。以上是关于没有回调的猫鼬更新的主要内容,如果未能解决你的问题,请参考以下文章