Sorting and Mongoose.js findOneAndRemove



根据Mongoose.js文档,应该可以向直接传递到数据库的方法(如findOneAndUpdatefindOneAndRemove)添加排序指令。

我试图获取一个符合条件的文档,并将其从数据库中删除。到目前为止,我已经尝试过:

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是一个可行的选择,但如果可能的话,我更希望操作是原子操作。

是否可以在Mongoose.js查询(如findOneAndUpdatefindOneAndRemove)中使用排序指令?如果可以,使用什么语法?

也许将排序条件更改为:会有所帮助

{created_at: 1}

'或'

{created_at: -1}

(分别用于上升或下降)。我目前也在努力使用findOneAndRemove包装。它似乎并不完美。

根据此处的API文档,这似乎在mongoose.js.的v3.8.18中得到了修复

它很可能是早些时候修复的,但这是我使用的版本。

最新更新