【发布时间】:2014-01-16 08:07:58
【问题描述】:
根据 Mongoose.js 文档,应该可以将排序指令添加到直接传递给数据库的方法,如 findOneAndUpdate 或 findOneAndRemove。
我正在尝试获取与标准匹配的单个文档并将其从数据库中删除。到目前为止,我已经尝试过:
Model.findOneAndRemove({foo: 'bar'})
.sort({created_at: 'asc'})
.exec(callback);
和
Model.findOneAndRemove({foo: 'bar'}, {sort: {created_at: 'asc'}}).exec(callback);
两者似乎都忽略了排序指令,只是查找并删除了最近添加的匹配文档,而不是日期最早的文档created_at。
以findOne 的形式发出查询,然后在回调函数中删除文档按预期工作,例如,
Model.findOne({foo: 'bar'}).sort({created_at: 'asc'})
.exec(function (err, doc) {
doc.remove();
});
返回并删除最早created_at日期的文档,所以我认为findOneAndRemove查询中的排序(与常规查询不同,直接交给MongoDB)必须使用不同的语法。
使用findOne 代替findOneAndRemove 是一个可行的选择,但如果可能的话,我希望操作是原子的。
是否可以将排序指令与 findOneAndUpdate 或 findOneAndRemove 等 Mongoose.js 查询一起使用,如果可以,使用什么语法?
【问题讨论】:
-
对我来说似乎是一个错误,就像你说的那样,猫鼬医生说可以做到,但我不能让它工作。看看你是否可以提交错误或发送电子邮件给 mongoose 工作人员。
标签: javascript node.js mongodb mongoose