根据 Mongoose.js 文档,可以在直接传递给数据库的方法中添加排序指令,例如
我想获取符合条件的单个文档并将其从数据库中删除。到目前为止,我尝试过:
findOneAndUpdate
或 findOneAndRemove
。我想获取符合条件的单个文档并将其从数据库中删除。到目前为止,我尝试过:
Model.findOneAndRemove({foo: 'bar'})
.sort({created_at: 'asc'})
.exec(callback);
并且
Model.findOneAndRemove({foo: 'bar'}, {sort: {created_at: 'asc'}}).exec(callback);
这两种方法似乎都忽略了排序指令,只是找到并删除最近添加的匹配文档,而不是创建时间最早的文档。
将查询发出作为findOne
,然后在回调函数中删除文档可以按预期工作,例如:
Model.findOne({foo: 'bar'}).sort({created_at: 'asc'})
.exec(function (err, doc) {
doc.remove();
});
findOneAndRemove
方法返回并删除创建时间最早的文档,因此我认为在 findOneAndRemove
查询中进行排序(与普通查询不同,会直接传递给 MongoDB)必须使用不同的语法。
使用 findOne
而不是 findOneAndRemove
是一个可行的选择,但如果可能的话,我更喜欢这个操作是原子的。
是否可以在 Mongoose.js 的查询中像 findOneAndUpdate
或 findOneAndRemove
一样使用排序指令,如果可以,语法是什么?