根据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包装器。它似乎并没有完美地工作。

10-06 13:17