账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongodb 查询问题;
    64
    0

    数据结构

    {
        "_id" : ObjectId("59e72a88d416aa6ab8f79d7b"),
        "category_name" : "油",
        "parent_id" : "0",
        "__v" : 0
    }
    
    /* 2 */
    {
        "_id" : ObjectId("59e72acad416aa6ab8f79d7c"),
        "category_name" : "肉类",
        "parent_id" : "0",
        "__v" : 0
    }
    
    /* 3 */
    {
        "_id" : ObjectId("59e85b76813a3011280b1186"),
        "category_name" : "芝麻肉",
        "parent_id" : "59e72acad416aa6ab8f79d7c",
        "__v" : 0
    }
    
    /* 4 */
    {
        "_id" : ObjectId("59e85b84813a3011280b1187"),
        "category_name" : "猪肉",
        "parent_id" : "59e72acad416aa6ab8f79d7c",
        "__v" : 0
    }
    
    /* 5 */
    {
        "_id" : ObjectId("5a15027971d44b046f83d605"),
        "category_name" : "牛肉油",
        "parent_id" : "59e72a88d416aa6ab8f79d7b",
        "__v" : 0
    }
    
    /* 6 */
    {
        "_id" : ObjectId("5a1502d871d44b046f83d606"),
        "category_name" : "花生油",
        "parent_id" : "59e72a88d416aa6ab8f79d7b",
        "__v" : 0
    }
    
    /* 7 */
    {
        "_id" : ObjectId("5a154dd83af2940ba6727a39"),
        "category_name" : "豆油",
        "parent_id" : "59e72a88d416aa6ab8f79d7b",
        "__v" : 0
    }

    这是我的查询代码;结果达不到,适合用组合函数查吗。还是哪不对了

    db.getCollection('categoties').group({
        keyf:function(doc){
            if(doc.parent_id==0){
                 return {id:doc._id,name:doc.category_name}
              }else{
               return {id:doc.parent_id}
               }
            },
        reduce:function(obj,prev){
               if(obj.parent_id!=0){
                   prev.items.push(obj);
                  }
            },
        initial:{items:[]}
        })
     #结果如下:
    
    [
        {
            "id" : ObjectId("59e72a88d416aa6ab8f79d7b"),
            "name" : "油",
            "items" : []
        },
        {
            "id" : ObjectId("59e72acad416aa6ab8f79d7c"),
            "name" : "肉类",
            "items" : []
        },
        {
            "id" : "59e72acad416aa6ab8f79d7c",
            "items" : [ 
                {
                    "_id" : ObjectId("59e85b76813a3011280b1186"),
                    "category_name" : "芝麻肉",
                    "parent_id" : "59e72acad416aa6ab8f79d7c",
                    "__v" : 0
                }, 
                {
                    "_id" : ObjectId("59e85b84813a3011280b1187"),
                    "category_name" : "猪肉",
                    "parent_id" : "59e72acad416aa6ab8f79d7c",
                    "__v" : 0
                }
            ]
        },
        {
            "id" : "59e72a88d416aa6ab8f79d7b",
            "items" : [ 
                {
                    "_id" : ObjectId("5a15027971d44b046f83d605"),
                    "category_name" : "牛肉油",
                    "parent_id" : "59e72a88d416aa6ab8f79d7b",
                    "__v" : 0
                }, 
                {
                    "_id" : ObjectId("5a1502d871d44b046f83d606"),
                    "category_name" : "花生油",
                    "parent_id" : "59e72a88d416aa6ab8f79d7b",
                    "__v" : 0
                }, 
                {
                    "_id" : ObjectId("5a154dd83af2940ba6727a39"),
                    "category_name" : "豆油",
                    "parent_id" : "59e72a88d416aa6ab8f79d7b",
                    "__v" : 0
                }
            ]
        }
    ]

    我想要的结果是这样的:

    [
        {
            "id" : ObjectId("59e72a88d416aa6ab8f79d7b"),
            "name" : "油",
             "items" : [ 
                {
                    "_id" : ObjectId("5a15027971d44b046f83d605"),
                    "category_name" : "牛肉油",
                    "parent_id" : "59e72a88d416aa6ab8f79d7b",
                    "__v" : 0
                }, 
                {
                    "_id" : ObjectId("5a1502d871d44b046f83d606"),
                    "category_name" : "花生油",
                    "parent_id" : "59e72a88d416aa6ab8f79d7b",
                    "__v" : 0
                }, 
                {
                    "_id" : ObjectId("5a154dd83af2940ba6727a39"),
                    "category_name" : "豆油",
                    "parent_id" : "59e72a88d416aa6ab8f79d7b",
                    "__v" : 0
                }
            ]
        },
        {
            "id" : ObjectId("59e72acad416aa6ab8f79d7c"),
            "name" : "肉类",
            "items" : [ 
                {
                    "_id" : ObjectId("59e85b76813a3011280b1186"),
                    "category_name" : "芝麻肉",
                    "parent_id" : "59e72acad416aa6ab8f79d7c",
                    "__v" : 0
                }, 
                {
                    "_id" : ObjectId("59e85b84813a3011280b1187"),
                    "category_name" : "猪肉",
                    "parent_id" : "59e72acad416aa6ab8f79d7c",
                    "__v" : 0
                }
            ]
        }
    ]
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • MongoDB 是一个高性能的开源文档数据库,它支持丰富的查询语法,可以帮助您更有效地查找和管理数据。以下是MongoDB 查询的基本概念和一些常见查询类型:

      1. 查询的基本概念
      2. 索引:在 MongoDB 中,索引是一种特殊的文档数据结构,可以帮助您快速查找数据。索引可以按值、文档类型、哈希值等进行分类。创建索引可以帮助您减少查询时间。
      3. 分组查询:您可以根据文档的某个字段将数据分组。这可以帮助您按特定字段进行聚合计算。
      4. 查询聚合:聚合查询允许您对文档进行聚合计算,例如计算文档的总和、平均值、计数等。
      5. 查询范围:您可以根据文档的某个字段设置查询范围。这可以帮助您找到文档中符合特定条件的数据。
      6. 查询过滤:过滤查询允许您根据文档的某个字段设置过滤条件。这可以帮助您找到文档中符合特定条件的数据。

      7. 常见查询类型

      8. 单文档查询:用于查找单个文档。
      9. 集合查询:用于查找多个文档组成的集合。
      10. 聚合查询:用于对集合中的文档进行聚合计算。
      11. 查询范围:用于根据文档的某个字段设置查询范围。
      12. 查询过滤:用于根据文档的某个字段设置过滤条件。

      以上是MongoDB 查询的一些基本概念和一些常见查询类型。希望这些信息对您有所帮助。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部