【问题标题】:Sorting and Mongoose.js findOneAndRemove排序和 Mongoose.js findOneAndRemove
【发布时间】:2014-01-16 08:07:58
【问题描述】:

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

是否可以将排序指令与 findOneAndUpdatefindOneAndRemove 等 Mongoose.js 查询一起使用,如果可以,使用什么语法?

【问题讨论】:

  • 对我来说似乎是一个错误,就像你说的那样,猫鼬医生说可以做到,但我不能让它工作。看看你是否可以提交错误或发送电子邮件给 mongoose 工作人员。

标签: javascript node.js mongodb mongoose


【解决方案1】:

也许将排序条件更改为:

    {created_at: 1}

'或'

    {created_at: -1}

(分别用于升序或降序)。 我目前也在努力使用 findOneAndRemove 包装器。它似乎无法完美运行。

【讨论】:

    【解决方案2】:

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

    很可能之前已修复,但这是我正在使用的版本。

    【讨论】:

      猜你喜欢
      • 2015-02-02
      • 2018-11-09
      • 2015-03-15
      • 1970-01-01
      • 2017-12-24
      • 2014-05-01
      • 2015-06-06
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多