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"] },
]
}}
}
]