Javascript 通过几个字段值获取文档

Javascript 通过几个字段值获取文档,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我有一个foodmongodb模式,如下所示: { name: 'Pork meat', category: 'Meat' } 存在属于特定类别的多个类别和多个项目 我希望按类别对项目进行排序,如下所示: { category: 'Meat', items: [ITEMS_WHICH_BELONG_TO_THIS_CATEGORY] }, { category: 'Drink', items: [ITEMS_WHICH_BELONG_TO_THIS_CATEGORY] }, { categor

我有一个
food
mongodb模式,如下所示:

{
name: 'Pork meat',
category: 'Meat'
}
存在属于特定类别的多个类别和多个项目

我希望按类别对项目进行排序,如下所示:

{
category: 'Meat', items: [ITEMS_WHICH_BELONG_TO_THIS_CATEGORY]
},
{
category: 'Drink', items: [ITEMS_WHICH_BELONG_TO_THIS_CATEGORY]
},
{
category: 'Souce', items: [ITEMS_WHICH_BELONG_TO_THIS_CATEGORY]
}
我有以下代码:

const categories = await Food.find().distinct('category').exec()
const result = []
    for (let i = 0; i < categories.length; i++) {
      result.push({ category: categories[i], items: await Food.find({ category: categories[i] }).exec() })
    }
const categories=wait Food.find().distinct('categories').exec()
常量结果=[]
for(设i=0;i

这很好,但是我可以优化这段代码吗?我可以在一个查询中完成此操作吗?

您可以使用map或forEach来优化循环

const result = categories.map((category) => {
   return {
    category,
    items: await Food.find({ category: category }).exec()
}
})

您可以使用map或forEach来优化循环

const result = categories.map((category) => {
   return {
    category,
    items: await Food.find({ category: category }).exec()
}
})

使用聚合管道根据
类别对
食品
项目进行分组

Food.aggregate([{
    $group : {
        _id : "$category",
        items : { $push : "$name"}
    }
}],function(err, result){
    //result will have food items grouped by category
})

有关更多信息,请参见MongoDB和。

使用聚合管道根据
类别对
食品
项目进行分组:

Food.aggregate([{
    $group : {
        _id : "$category",
        items : { $push : "$name"}
    }
}],function(err, result){
    //result will have food items grouped by category
})

有关更多信息,请参见MongoDB和。

使用
db.collection\u name.aggregate([{$group:{{{u id:“$category”,items:{$push:$$ROOT}},{$sort:{{u id:1}]))
这很好,但是我可以优化这段代码吗?我可以在一个查询中做到这一点吗
-单次查询与多次查询并不总是===更好的性能,但是,说了这个问题的答案可能只是基于意见-而且,这更像是@Veeram的问题,你有最好的解决方案,谢谢lot@Fran感谢s、 我将考虑futureUse
db.collection\u name.aggregate([{$group:{{u id:“$category”,items:{$push:$$ROOT}}}},{$sort:{{u id:1}])
这很好,但是我可以优化这段代码吗?我可以在一个查询中做到这一点吗
-单次查询与多次查询并不总是===更好的性能,但是,说了这个问题的答案可能只是基于意见-而且,这更像是@Veeram的问题,你有最好的解决方案,谢谢lot@Fran感谢s、 我会考虑将来的事