排序和Mongoose.js findOneAndRemove

时间:2013-12-29 06:00:18

标签: javascript node.js mongodb mongoose

根据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)必须使用不同的语法。 / p>

使用findOne而不是findOneAndRemove是一个可行的选择,但如果可能的话,我希望操作是原子操作。

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

3 个答案:

答案 0 :(得分:0)

也许将有助于将排序条件更改为:

    {created_at: 1}

'或'

    {created_at: -1}

(分别为升序或降序)。 我目前正在努力使用findOneAndRemove包装器。它似乎没有完美的工作。

答案 1 :(得分:0)

基于API Documentation here,这似乎在mongoose.js的v3.8.18中得到修复。

很可能早些时候已修复,但那是我正在使用的版本。

答案 2 :(得分:-1)

Model.findOneAndRemove({foo: 'bar'}, {sort: {created_at: -1}}, (err, doc) => {

})