Mongo 对象数组中的数据库不同值组
Mongo DB distinct values group within array of objects
假设我有一个如下的文档模型
{
"_id" : "QggaecdDWkZzMmmM8",
"features" : [
{
"language" : "en",
"values" : [
{
"name" : "feature 1",
"values" : [
"test",
"best"
]
},
{
"name" : "feature2",
"values" : [
"guest",
"nest"
]
}
]
}
}
现在我需要 运行 使用 return 特征的唯一名称和值对进行查询。就像一个文档的名称特征 1 "test" 和最佳值一样,另一个文档具有相同的键(特征 1 具有不同的值,即 "guest"),因此结果将是
name: featuer 1
values: [test, best and guest]
到目前为止,我尝试了以下查询,但最后 return 出错
db.getCollection('products').aggregate(
{$unwind: '$features'},
{$group:
{_id: "$features.values.name"},
name: {$addToSet: '$name'}
})
错误信息是
exception: A pipeline stage specification object must contain exactly one field
名称字段应该在小组赛阶段内,这就是你出错的原因。
试试这个查询:
db.getCollection('products').aggregate([
{
$unwind: '$features'
},
{
$unwind: '$features.values'
},
{
$unwind: '$features.values.values'
},
{
$group: {
_id: "$features.values.name",
values: {$addToSet: '$features.values.values'}
},
}
])
结果:
{ "_id" : "feature2", "values" : [ "nest", "guest" ] }
{ "_id" : "feature 1", "values" : [ "best", "test" ] }
假设我有一个如下的文档模型
{
"_id" : "QggaecdDWkZzMmmM8",
"features" : [
{
"language" : "en",
"values" : [
{
"name" : "feature 1",
"values" : [
"test",
"best"
]
},
{
"name" : "feature2",
"values" : [
"guest",
"nest"
]
}
]
}
}
现在我需要 运行 使用 return 特征的唯一名称和值对进行查询。就像一个文档的名称特征 1 "test" 和最佳值一样,另一个文档具有相同的键(特征 1 具有不同的值,即 "guest"),因此结果将是
name: featuer 1
values: [test, best and guest]
到目前为止,我尝试了以下查询,但最后 return 出错
db.getCollection('products').aggregate(
{$unwind: '$features'},
{$group:
{_id: "$features.values.name"},
name: {$addToSet: '$name'}
})
错误信息是
exception: A pipeline stage specification object must contain exactly one field
名称字段应该在小组赛阶段内,这就是你出错的原因。
试试这个查询:
db.getCollection('products').aggregate([
{
$unwind: '$features'
},
{
$unwind: '$features.values'
},
{
$unwind: '$features.values.values'
},
{
$group: {
_id: "$features.values.name",
values: {$addToSet: '$features.values.values'}
},
}
])
结果:
{ "_id" : "feature2", "values" : [ "nest", "guest" ] }
{ "_id" : "feature 1", "values" : [ "best", "test" ] }