代码之家  ›  专栏  ›  技术社区  ›  Ankur Soni

如何将Group By和concat字段用作字符串

  •  3
  • Ankur Soni  · 技术社区  · 8 年前

    我是新手 MongoDB 3.2 ,

    考虑以下示例,

    { "_id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 1" }
    { "_id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 2" }
    { "_id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 3" }
    

    我如何使用 分组依据 _id 并创建单个字段,将所有文档字段串联在一起,下面是预期输出,

    { "_id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 1, GSTR 2, GSTR 3" }
    

    我在下面使用了,但它给出了数组,

    db.getCollection('Clients').aggregate(
          [
            {
                $group : {
                 _id : "$_id",
                 services :  "$services"
                }
            }
          ]
        ).map( doc =>
          Object.assign(
            doc,
           { "services": doc.services.join(",") }
          )
        );
    

    其输出为

    [{ "_id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 1, GSTR 2, GSTR 3" }]
    
    2 回复  |  直到 8 年前
        1
  •  5
  •   Ikar Pohorský    6 年前

    很好,我查过了

    db.client.insert([
        { "id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 1" },
        { "id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 2" },
        { "id" : "2tLX8ALYfRvbgiurZ", "service" : "GSTR 3" }
    ]);
    
    db.getCollection('client').aggregate(
        [
            {
                $group: {
                    _id:"$id",
                    myfield: {$push: {$concat: ["$service"]}}
                }
            },
            {
                $project:{
                    "results": {
                        $reduce: {
                            input: "$myfield",
                            initialValue: '',
                            in: {$concat: ["$$value", ", ", "$$this"]}
                        }
                    }
                }
            }
        ]
    );
    
        2
  •  0
  •   Israel Zinc    8 年前
    docIwant = db.getCollection('Clients').aggregate(
          [
            {
                $group : {
                 _id : "$_id",
                 services :  "$services"
                }
            }
          ]
        ).map( doc =>
          Object.assign(
            doc,
           { "services": doc.services.join(",") }
          )
        );
    return docIwant[0].