如何在 MongoDB 中使相同的 collection 内连接等效?
How to make same collection inner join equivalent in MongoDB?
我有 collection 看起来像 EAV(或一些 key/value):
{domain_id: 1, key: "A", value: 1}
{domain_id: 1, key: "B", value: 2}
{domain_id: 1, key: "C", value: 3}
{domain_id: 2, key: "A", value: 5}
{domain_id: 2, key: "B", value: 2}
{domain_id: 2, key: "C", value: 3}
{domain_id: 3, key: "C", value: 3}
我需要找到所有 domain_id
具有 key = "A" AND value = 1
并且还具有 key = "C" AND value = 3
(交集,而不是 OR 条件)的所有 domain_id
,因此假定的结果将是:
{domain_id: 1}
$group
- 在 data
字段中按 domain_id
和 $push
文档分组。
$match
- 使用 $and
进行多重比较,$elemMatch
匹配数组元素中的字段值。
$project
- Select domain_id
.
db.collection.aggregate([
{
$group: {
_id: "$domain_id",
data: {
$push: "$$ROOT"
}
}
},
{
$match: {
$and: [
{
"data": {
$elemMatch: {
"key": "A",
"value": 1
}
}
},
{
"data": {
$elemMatch: {
"key": "C",
"value": 3
}
}
}
]
}
},
{
$project: {
domain_id: "$_id"
}
}
])
我有 collection 看起来像 EAV(或一些 key/value):
{domain_id: 1, key: "A", value: 1}
{domain_id: 1, key: "B", value: 2}
{domain_id: 1, key: "C", value: 3}
{domain_id: 2, key: "A", value: 5}
{domain_id: 2, key: "B", value: 2}
{domain_id: 2, key: "C", value: 3}
{domain_id: 3, key: "C", value: 3}
我需要找到所有 domain_id
具有 key = "A" AND value = 1
并且还具有 key = "C" AND value = 3
(交集,而不是 OR 条件)的所有 domain_id
,因此假定的结果将是:
{domain_id: 1}
$group
- 在data
字段中按domain_id
和$push
文档分组。$match
- 使用$and
进行多重比较,$elemMatch
匹配数组元素中的字段值。$project
- Selectdomain_id
.
db.collection.aggregate([
{
$group: {
_id: "$domain_id",
data: {
$push: "$$ROOT"
}
}
},
{
$match: {
$and: [
{
"data": {
$elemMatch: {
"key": "A",
"value": 1
}
}
},
{
"data": {
$elemMatch: {
"key": "C",
"value": 3
}
}
}
]
}
},
{
$project: {
domain_id: "$_id"
}
}
])