我有一個看起來像 EAV(或一些鍵/值)的集合:
{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: 1}
uj5u.com熱心網友回復:
$group- 分組依據domain_id和欄位中的$push檔案data。$match-$and用于多重比較,$elemMatch匹配陣列元素中的欄位值。$project- 選擇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"
}
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/338563.html
