【问题标题】:Mongoose error Unsupported projection option: sort: { createdAt: -1 }猫鼬错误不支持的投影选项:排序:{createdAt:-1}
【发布时间】:2016-12-20 14:59:54
【问题描述】:

我正在尝试按日期对我的 mongoose 条目进行排序,最近在 node.js express 中使用 mongoose 排序。

猫鼬查询是:

  FecalRequest.findOne({uid: req.user.id}, {sort:{'createdAt':-1}}, (err, fecalkits) => {
    console.log(fecalkits);
    done(err, respiratorykits, fecalkits)
  });

我已经尝试过 created_at 和 createdAt。错误是 eMongoError:不支持的投影选项:排序:{ createdAt:-1 }

作为参考,FecalRequest 模型如下所示:

const fecalSchema = new mongoose.Schema(
  {
    uid: String,
    email: String,
    status: {type: String, default: 'No Request' },
  },
  { timestamps: true });

我只想返回特定用户最近创建的条目。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    您不会为此使用 findOne。您可以将 find() 与 sort() 和 limit() 一起使用。

    findOne 只会返回找到的第一个符合您的搜索条件的文档。

    【讨论】:

      【解决方案2】:

      包含一个空对象作为第二个(投影)参数,以便findOne 的第三个参数被正确解释为查询选项:

      FecalRequest.findOne({uid: req.user.id}, {}, {sort:{'createdAt':-1}}, (err, fecalkits) => {
        console.log(fecalkits);
        done(err, respiratorykits, fecalkits)
      });
      

      绝对是我在回答中使用“粪便”这个词的次数最多的一次。

      【讨论】:

        【解决方案3】:

        如果您只找到一个文档,我认为不可能进行排序。

        我相信“查找”是您应该使用的功能?

        【讨论】:

          【解决方案4】:

          在最新版本的 Mongoose 中,您不能将 sortfindOne 一起使用。 (见query options doc。)

          您的查询将变为:

          FecalRequest.find({uid: req.user.id}, {}, {sort: {'createdAt':-1}, limit: 1}, (err, fecalkits) => {
            console.log(fecalkits);
            done(err, respiratorykits, fecalkits);
          });

          请记住,这会返回一个列表。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-09-02
            • 2020-12-01
            • 1970-01-01
            • 2021-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多