Mongoose错误不支持的投影选项:sort:{createdAt:-1}

时间:2016-08-13 22:36:51

标签: node.js mongodb express mongoose

我试图按日期排序我的猫鼬条目,最近在node.js中的第一个用mongoose表示。

mongoose查询是:

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

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

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

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

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

4 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果您只找到一个文档,我认为无法进行排序。

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

答案 3 :(得分:0)

在最新版本的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);
});

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