MongoDB查找匹配数组中的两个元素

MongoDB查找匹配数组中的两个元素,mongodb,aggregation-framework,mongoid,Mongodb,Aggregation Framework,Mongoid,我有一个用户集合,其文档如下所示: { "name": "James", "participations": [ { participant_id: 1, participant_type: "Board", // other fields }, { particip

我有一个用户集合,其文档如下所示:

{
      "name": "James",
      "participations": [
        {
          participant_id: 1,
          participant_type: "Board",
          // other fields
        },
        {
          participant_id: 2,
          participant_type: "Team"
          // other fields
        }
      ]
    },
我正在聚合用户集合:

db.boards.aggregate([
  { '$match' => { _id: 65 } },
  { '$lookup' => 
        { from: "users", as: "users",
          let: { "board_id": "$_id" },
          pipeline: [
            { '$match' =>
               { '$expr' => {
                 '$and' => [
                    { '$in' => ["Board", "$participations.participant_type"] },
                    { '$in' => ["$$board_id", "$participations.participant_id"] }, 
                 ]
              }}
            }
          ],
        } 
      },
])
然而,上述逻辑是有缺陷的。如果一个用户参与了一个id为65的团队,那么该用户将出现,即使他没有参与董事会


我想选择所有参与者类型为“Board”且参与者id为65的用户。我尝试使用elemMatch,但显然聚合框架不支持它?

如果您对participations数组中的每个元素都不感兴趣,可以通过
$unwind
打开participations字段来实现您的目标。这将为数组中的每个元素提供一个文档,然后您可以与之匹配,如下所示:

pipeline: [
            { '$unwind' => '$participations' },
            { '$match' =>
               { '$expr' => {
                 '$and' => [
                    { '$eq' => ["Board", "$participations.participant_type"] },
                    { '$eq' => ["$$board_id", "$participations.participant_id"] }, 
                 ]
              }}
            }
          ]