我有一个文档集合,其中每个文档可能有一个teamsIds的数组,比如:

{
  "id": 1,
  "teamsIds": ["team_a", "team_b"]
}

我正在try 编写一个聚合(在前面执行$Match阶段),它将对文档进行$投影并返回如下对象:

{ 
  "id": 1,
  "matchingFilter": true
}

当TeamsIds包含我正在判断的任何团队时,其中matchingFilter应该为真.在上面的文档中,当搜索团队时,我需要matchingFiltertrue:["Team_c","Team_a"],因为它分配了"Team_a".实现这一目标的最简单方法是什么?我不能在聚合管道中使用$elemMatch,有没有可以使用的类似功能?

推荐答案

预期集合相交行为的规范实现是使用$setIntersection

db.collection.aggregate([
  {
    "$match": {
      // your match here
      
    }
  },
  {
    "$project": {
      "id": 1,
      "matchingFilter": {
        "$ne": [
          [],
          {
            "$setIntersection": [
              {
                "$ifNull": [
                  "$teamsIds",
                  []
                ]
              },
              // your input array here
              [
                "team_c",
                "team_a"
              ]
            ]
          }
        ]
      }
    }
  }
])

Mongo Playground

Mongodb相关问答推荐

MongoDB:子文档中仅存在于父文档中的返回字段?

使用查询参数过滤MongoDB Go驱动程序时出现问题

如何限制/筛选子文档中的条目?

无法从我的NextJS 14应用程序中的Redux工具包2.0中提取数据

MongoDB:如何通过增量向量递增整数向量

MongoDB MQL,将列表一分为二,仅获取唯一值

所有文档中嵌套 struct 中的条件匹配-mongodb

mongodb - 查找包含至少 3 个填充数组的记录

如何在 MongoDB 集合中查找与给定条件匹配的文档和单个子文档

无法将 $match 运算符用于带有 ObjectId 的 mongodb/mongoose 聚合

启动mongodb和express的正确方法?

如何将 mongoDB 数据导出为 CSV 格式?

是否有适用于 Linux 的 MongoDB GUI 桌面应用程序?

MongoDB:自动生成的 ID 为零

如何使用 MongoDB 以编程方式预拆分基于 GUID 的分片键

MongoDB服务器仍然可以在没有凭据的情况下访问

mongo中的稀疏索引和空值

缩短 MongoDB 属性名称值得吗?

在 mongodb 集合中查找最旧/最新的帖子

对象不是 JSON 可序列化的