Javascript 如何使用聚合和展开返回文档和子数组?
我使用以下mongoose查询从文档返回最流行的零食。文件如下:Javascript 如何使用聚合和展开返回文档和子数组?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我使用以下mongoose查询从文档返回最流行的零食。文件如下: { "_id": ObjectId("58d7d2d760b78902f1df3fa2"), "user_id": ObjectId("58d2dd4c8207c28149dbc748"), "calories": 2000, "date": 20170226, "snacks": [ { "nutrients": { "protein": 7.5, "carbs": 56.5, "
{
"_id": ObjectId("58d7d2d760b78902f1df3fa2"),
"user_id": ObjectId("58d2dd4c8207c28149dbc748"),
"calories": 2000,
"date": 20170226,
"snacks": [
{
"nutrients": {
"protein": 7.5,
"carbs": 56.5,
"fat": 10.5
},
"servings": 23.8,
"calories": 526,
"name": "Dairy milk"
},
"dinner": [ ],
"lunch": [ ],
"breakfast": [ ]
}
然后,我使用以下查询:
user_food.aggregate({$unwind: $snacks},{$sortByCount: $snacks.name},function(err, results){
if(err){
console.log("something went wrong: " + err);
return res.status(500).send(err);
}
else{
return res.status(200).send(results);
}
});
这将返回:
_id:"Dairy milk"
count:3
我需要返回的是整个对象:
"nutrients": {
"protein": 7.5,
"carbs": 56.5,
"fat": 10.5
},
"servings": 23.8,
"calories": 526,
"name": "Dairy milk",
count:3
通过\u id
+$sort
相当于$group
。要在$group
阶段中添加更多字段,需要使用以获取指定字段的第一个值:
user_food.aggregate([{
$unwind: "$snacks"
}, {
$group: {
_id: "$snacks.name",
snacks: { $first: "$snacks" },
count: { $sum: 1 }
}
}, {
$sort: {
count: -1
}
}], function(err, results) {
if (err) {
console.log("something went wrong: " + err);
return res.status(500).send(err);
} else {
return res.status(200).send(results);
}
});
您将得到如下结果:
{
"snacks": {
"nutrients": {
"protein": 7.5,
"carbs": 56.5,
"fat": 10.5
},
"servings": 23.8,
"calories": 526,
"name": "Dairy milk",
},
count: 3
}
通过\u id
+$sort
相当于$group
。要在$group
阶段中添加更多字段,需要使用以获取指定字段的第一个值:
user_food.aggregate([{
$unwind: "$snacks"
}, {
$group: {
_id: "$snacks.name",
snacks: { $first: "$snacks" },
count: { $sum: 1 }
}
}, {
$sort: {
count: -1
}
}], function(err, results) {
if (err) {
console.log("something went wrong: " + err);
return res.status(500).send(err);
} else {
return res.status(200).send(results);
}
});
您将得到如下结果:
{
"snacks": {
"nutrients": {
"protein": 7.5,
"carbs": 56.5,
"fat": 10.5
},
"servings": 23.8,
"calories": 526,
"name": "Dairy milk",
},
count: 3
}
您的文档示例不是有效的JSONY您的文档示例不是工作正常的有效JSON。我对它进行了轻微的编辑,让用户可以决定选择哪一种食物,但除此之外,它的工作方式正是我所需要的。太谢谢你了,这很有效。我对它进行了轻微的编辑,让用户可以决定选择哪一种食物,但除此之外,它的工作方式正是我所需要的。非常感谢你。