Ana*_*nth 10 mongodb mongodb-php mongodb-query
这是我的MongoDB集合:
{
"_id" : ObjectId("515d8f53175b8ecb053425c2"),
"category" : "Batteries",
"products" : [
{
"brand" : "Duracell",
"item" : [
"AA",
"AAA"
]
},
{
"brand" : "Everyday",
"item" : [
"9V",
"AA",
"12V"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要的输出是
1)所有项目的唯一列表
{["AA", "AAA", "9V", "12V"]}
Run Code Online (Sandbox Code Playgroud)
2.每个产品的唯一项目清单
{
"category" : "Batteries",
"item": ["AA", "AAA", "9V", "12V"]
}
Run Code Online (Sandbox Code Playgroud)
我是MongoDB的新手,我尝试了不同的聚合功能,似乎没什么用.请帮忙.
Ana*_*nth 16
经过几次尝试,我解决了这个问题.这是命令:
db.xyz.aggregate( {$project: {a: '$products.item'}},
{$unwind: '$a'},
{$unwind: '$a'},
{$group: {_id: 'a', items: {$addToSet: '$a'}}});
Run Code Online (Sandbox Code Playgroud)
和
db.xyz.aggregate( {$project: {category: 1, a: '$products.item'}},
{$unwind: '$a'},
{$unwind: '$a'},
{$group: {_id: '$category', items: {$addToSet: '$a'}}});
Run Code Online (Sandbox Code Playgroud)
在 mongodb3.4 之后,有一个$reduce操作符,所以我们可以在没有额外阶段的情况下扁平化数组。
1.
col.aggregate([
{
$project: {
items: {
$reduce: {
input: "$products.items",
initialValue: [],
in: { $concatArrays: ["$$value", "$$this"] },
},
},
},
},
{ $unwind: "$items" },
{ $group: { _id: null, items: { $addToSet: "$items" } } },
]);
Run Code Online (Sandbox Code Playgroud)
2.
col.aggregate([
{
$project: {
category: 1,
items: {
$setUnion: {
$reduce: {
input: "$products.items",
initialValue: [],
in: { $concatArrays: ["$$value", "$$this"] },
},
},
},
},
},
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10773 次 |
| 最近记录: |