多相关集合属性的Mongoose过滤器

多相关集合属性的Mongoose过滤器,mongoose,Mongoose,我有两种收集类型, 集合a有一个属性,该属性包含包含集合b中对象的数组 收藏 收集 我需要查询集合a中的所有对象,以确保至少有一个已连接集合b项属性isOpen设置为true 以下是我尝试过但不起作用的过滤器: {'collection_b.isOpen' : true} $lookup在let中使用管道传递收集 $match检查条件collection\u b条件和isOpen条件 $group按null并仅返回id,(其选项)此阶段的目的是返回查找的有限结果以避免内存超出限制,如果您确定

我有两种收集类型, 集合a有一个属性,该属性包含包含集合b中对象的数组

  • 收藏
  • 收集
  • 我需要查询集合a中的所有对象,以确保至少有一个已连接集合b项属性
    isOpen
    设置为true

    以下是我尝试过但不起作用的过滤器:

    {'collection_b.isOpen' : true}
    
    • $lookup
      在let中使用管道传递
      收集
    • $match
      检查条件
      collection\u b
      条件和
      isOpen
      条件
    • $group
      按null并仅返回
      id
      ,(其选项)此阶段的目的是返回查找的有限结果以避免内存超出限制,如果您确定存在有限的可计数文档,则可以跳过此阶段
    • $match
      检查查找返回结果是否为空
    • $project
      删除
      收集结果
      字段不再需要

    {
      id:b1,
      isOpen:true
    }
    {
      id:b2,
      isOpen:false
    }
    {
      id:b3,
      isOpen:false
    }
    
    {'collection_b.isOpen' : true}
    
    db.collection_a.aggregate([
      {
        $lookup: {
          from: "collection_b",
          let: { collection_b: "$collection_b" },
          pipeline: [
            {
              $match: {
                $and: [
                  { $expr: { $in: ["$id", "$$collection_b"] } },
                  { isOpen: true }
                ]
              }
            },
            {
              $group: {
                _id: null,
                id: { $first: "$id" }
              }
            }
          ],
          as: "collection_b_result"
        }
      },
      { $match: { collection_b_result: { $ne: [] } } },
      { $project: { collection_b_result: 0 } }
    ])