【发布时间】:2020-07-06 23:45:47
【问题描述】:
我有一个用户集合,其文档如下所示:
{
"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,但显然聚合框架不支持它?
【问题讨论】:
标签: mongodb aggregation-framework mongoid