1 回答

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
你可以試試,
$group
by null 并創(chuàng)建根對(duì)象數(shù)組并獲取根中對(duì)象的總數(shù)$unwind
解構(gòu)root
我們?cè)谏厦骐A段創(chuàng)建的數(shù)組$unwind
解構(gòu)root.attributes
數(shù)組$group
通過(guò)root.attributes.attrId
和獲取分組文檔和值的總數(shù),以使用對(duì)象中的值數(shù)組形式root.attributes.values
獲取 k(key)attrId
和 v(value)并獲取第一個(gè)字段values
$map
totalCount
$match
使用$expr
檢查公共文檔計(jì)數(shù)和總根對(duì)象文檔的表達(dá)式都相等,然后返回匹配的文檔$replaceRoot
$arraToObject
從ofvalues
數(shù)組轉(zhuǎn)換后替換 and 對(duì)象
db.collection.aggregate([
{
$group: {
_id: null,
root: { $push: "$$ROOT" },
totalCount: { $sum: 1 }
}
},
{ $unwind: "$root" },
{ $unwind: "$root.attributes" },
{
$group: {
_id: {
attrId: "$root.attributes.attrId",
values: "$root.attributes.values"
},
values: {
$addToSet: {
k: "$root.attributes.attrId",
v: {
$map: {
input: "$root.attributes.values",
in: "$$this.name"
}
}
}
},
count: { $sum: 1 },
totalCount: { $first: "$totalCount" }
}
},
{ $match: { $expr: { $eq: ["$count", "$totalCount"] } } },
{ $replaceRoot: { newRoot: { $arrayToObject: "$values" } } }
])
添加回答
舉報(bào)