【问题标题】:Mongodb: $filter is not allowed in this atlas tierMongodb:此图集层不允许使用 $filter
【发布时间】:2021-04-26 11:44:30
【问题描述】:

我运行一个查询,该查询通过聚合返回一组用户。为了不返回执行查询的用户的文档,我在他的 id 上添加了一个 $filter。但我收到以下错误:

此图集层不允许使用$filter。

我连接到一个免费的 MongoAtlas 集群。这是我的代码。

 User.aggregate([
        { $filter: { _id: { $eq: id } } },
        {
          $match: {
            jobs: { $in: jobs },
           age: { $gte: minAge, $lte: maxAge },
          },
        },
      ]).exec((_, data) => res.json({ data }));

如何解决这个问题?

【问题讨论】:

标签: node.js mongodb mongoose


【解决方案1】:

$filter 不是流水线阶段,它用于过滤数组表达式。您可以将您要过滤的内容放在$match 阶段。

 User.aggregate([
        {
          $match: {
            _id: id,
            jobs: { $in: jobs },
            age: { $gte: minAge, $lte: maxAge },
          },
        },
      ]).exec((_, data) => res.json({ data }));

【讨论】:

  • 谢谢。但是,我想返回所有符合条件的文档,但提供了 id 的文档除外。在您的请求中,如果它符合以下条件,您将只返回一个与 id 匹配的文档。你会怎么做?
  • 那将是 _id: { $ne: id } 而不是 _id: id
  • 非常感谢!由于未知原因,它无法使用 _id,所以我改用了 username,现在一切都很好!
  • 您的id 可能是一个字符串,您可能必须像这样mongoose.Types.ObjectId(id) 转换为ObjectId
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2011-09-20
  • 2015-09-14
  • 2018-05-15
  • 2023-03-04
  • 2014-05-28
相关资源
最近更新 更多