在多个文档mongodb中获取嵌套数组元素

时间:2015-12-12 14:34:49

标签: java mongodb

我正在设计餐厅菜单,其中我基本上有3个类别。     我有一个条件,我的菜肴都出现在任何一个类别,但一旦添加了菜肴,我无法进一步添加更多类别。

This is my collection at the last level (3rd categories)

{
    "_id": "34",
    "restaurant_details_id": "R0023",
    "menu": [{
        "catName": "indian",
        "dishList": [],
        "subCatList": [{
            "subCatName": "chinease",
            "dishList": [],
            "subCatList": [{
                "subCatName": "korean",

                "dishList": [{
                    "dishtype": "food",
                    "dishname": "soup"
                }, {
                    "dishtype": "food",
                    "dishname": "soup"
                }],
                "completed": false
            }],
            "completed": false
        }]
    }]
}

因此,如果此人在第一类进入菜肴,则该收集将仅限于第一级。并且不会有任何类别。 因此,我有多个文件,其中重要的id是常见的。

现在问题是我必须找到餐厅,其餐厅ID =" R0023"和dishtype ="食物"。我可以找到我是否只有一个使用aggregate()的文档,但是当多个文档中存在数据时它是如何的。

我还必须在我的java中进一步实现它。我深受其害。

1 个答案:

答案 0 :(得分:0)

通过嵌套看起来你的结构不必要地复杂化了。我建议你重新构建它 - 引入一个名为dishes的新集合并存储这样的菜:

{
    _id: 1,
    restaurantId: "R0023",
    category: "indian",
    type: "food",
    name: "Chicken Razala"
}
{
    _id: 2,
    restaurantId: "R0023",
    category: "Chinese",
    type: "food",
    name: "Noodle Soup"
}

您将能够非常轻松地查询此结构的文档。

查询

db.dishes.find({ restaurantId: "R0023", type: "food" })

输出

{
    "_id" : 1,
    "restaurantId" : "R0023",
    "category" : "indian",
    "type" : "food",
    "name" : "Chicken Razala"
}
{
    "_id" : 2,
    "restaurantId" : "R0023",
    "category" : "Chinese",
    "type" : "food",
    "name" : "Noodle Soup"
}