我有以下收藏
[ { _id: 5b12a7977990062f097d03ce,
name: 'Breakfast',
category: 'dining' },
{ _id: 5b12a7977990062f097d03d0,
name: 'Brunch',
category: 'dining' },
{ _id: 5b12a7977990062f097d03d2,
name: 'Lunch',
category: 'dining' } ]
我必须收集主数组中name
category
的所有dining
我试过这个
const subCategory = await SubCategory.aggregate([
{ '$match': { category: "dining" }},
{ '$group': {
'_id': null,
'category': { '$push': '$name' }
}}
])
但它给了我这样的输出
[ { _id: null,
category:
[ 'Breakfast',
'Brunch',
'Lunch' ] } ]
我想要这样的输出
[ 'Breakfast',
'Brunch',
'Lunch' ]
答案 0 :(得分:1)
你可以map()
。将Array.map()
与mongoose一起使用,因为它返回一个数组,你最好只使用$group
_id
而不是使用$push
const subCategory = (await SubCategory.aggregate([
{ '$match': { category: "dining" } },
{ '$group': { '_id': "$name" } }
])).map(({ _id }) => _id);
如果使用核心驱动程序中的基础Collection
,则使用Cursor.map()
:
const subCategory = await SubCategory.collection.aggregate([
{ '$match': { category: "dining" } },
{ '$group': { '_id': "$name" } }
]).map(({ _id }) => _id).toArray();
与find()
大致相同,如果你不想要" distinct"结果:
const subCategory = (await Subcategory.find({ category: "dining" }))
.map(({ name }) => name);
或使用Cursor.map()
const subCategory = await Subcategory.collection.find({ category: "dining" })
.map(({ name }) => name).toArray();
您还可以使用distinct()
,它基本上会对汇总过程和map()
"进行更改。" ("仅返回字段部分"而不是不同的聚合方法):
const subCategory = await SubCategory.distinct("name",{ category: "dining" });
MongoDB本身不会返回BSON文档以外的任何内容,而简单的字符串不是BSON文档。
答案 1 :(得分:0)
location / {
proxy_pass http://targetwebsite;
}
执行上述聚合查询时获得的结果集将存储到临时集合临时文件
中进入下一阶段,我们可以执行以下操作以获得数组结果。
db.mycoll.aggregate(
// Pipeline
[
// Stage 1
{
$match: {
category: 'dining'
}
},
// Stage 2
{
$group: {
_id: null,
category: {
$addToSet: '$name'
}
}
},
// Stage 3
{
$out: "temp"
}
]