【发布时间】:2015-11-20 18:13:24
【问题描述】:
我正在尝试制作一个查询,让我可以在 MongoDB 的 subdocument 中找到 duplicate 键。
它需要能够查询任意数量的文档,并查看子文档中的哪些键在它们之间重复。我的子文档的键名为attributes,我需要能够针对文档的特定查询并提取它们共享的重复属性键。
编辑: 我忘了提到我不知道属性的名称提前。我需要能够从本质上选择它们共享的不同属性并聚合值。
采集样本:
[
{
sku: '123',
attributes: {
size: 'L',
custom: 7
}
},
{
sku: '456',
attributes: {
size: 'M'
}
},
{
sku: 'abc',
attributes: {
material: 'cotton'
size: 'S'
}
}
]
期望的结果(如果可能的话):
{
size: [' S', 'M', 'L']
}
如果无法获得想要的结果,我至少希望能够找回[ 'size' ]
这个过程需要尽可能优化,我似乎无法得到一个恰到好处的查询来返回我需要的东西,非常感谢任何帮助 =)
这是我目前所拥有的
db.getCollection('myCollection').aggregate([
{ $match: {
_id: { $in: [ObjectId("55158b0bd6076278295cf022"), ObjectId("55158b0bd6076278295cf021"), ObjectId("55158b0bd6076278295cf01f") ] }
}
},
{ $project: { attributes: 1 }},
{ $group: { _id: '$attributes' } }
])
输出哪些产品:
{
"result" : [
{
"_id" : {
"shirt_size" : "S",
"shirt_color" : "Blue",
"custom_attr" : "adsfasdf"
}
},
{
"_id" : {
"shirt_size" : "M",
"shirt_color" : "Green"
}
},
{
"_id" : {
"shirt_size" : "L",
"shirt_color" : "Red"
}
}
],
"ok" : 1.0000000000000000,
"$gleStats" : {
"lastOpTime" : Timestamp(1427475045, 1),
"electionId" : ObjectId("54f7c1edf8e5ff44cec194b6")
}
}
我觉得它已经接近了,我只是错过了最后一步:(
【问题讨论】:
标签: mongodb mongodb-query