在 mongoDB 中通过属性构建进行分组

Posted

技术标签:

【中文标题】在 mongoDB 中通过属性构建进行分组【英文标题】:Group by in mongoDB with property construction 【发布时间】:2020-07-26 21:42:03 【问题描述】:

我有一个名为 Accounts 的集合,如下数据所示

/* 1 */

    "_id" : ObjectId("5e93fea52f804ab99b54e4a2"),
    "account" : "first",
    "connect" : "Always",
    "desc" : "first account feature first phase",
    "status" : true


/* 2 */

    "_id" : ObjectId("5e93fea32c804ab99b12e4d1"),
    "account" : "second",
    "connect" : "Sometimes",
    "desc" : "second account feature first phase",
    "status" : true


/* 3 */

    "_id" : ObjectId("5e93fea52f804ab99b55a7b1"),
    "account" : "first",
    "connect" : "Sometimes",
    "desc" : "first account feature second phase",
    "status" : true

尝试以这样一种方式对数据进行分组和构造,以使查询返回如下结构的结果

/* First Row */
    "account" : "first",
    [
    
        _id:ObjectId("5e93fea52f804ab99b54e4a2") 
        "connect" : "Always",
        "desc" : "first account feature first phase",
        "status" : true
    ,
    
        _id:ObjectId("5e93fea52f804ab99b55a7b1") 
        "connect" : "Sometimes",
        "desc" : "first account feature second phase",
        "status" : true
    ,

    ]

/* Second Row */
     "account" : "second",
    [
    
        _id:ObjectId("5e93fea32c804ab99b12e4d1") 
        "connect" : "Always",
        "desc" : "second account feature first phase",
        "status" : true
    ,

    ]

希望与 Account 分组,并且相应的帐户行应该具有该 Id 的其他相关数据。

我尝试了什么

我试着写在下面的查询

db.accounts.aggregate(
     
        $match : account : $in: ["first", "second"]
    
    ,
     
        $group :  
             _id : "$account"
        
    
);

但这部分正确返回帐户列表,例如第一、第二但不相关的属性。

谢谢

【问题讨论】:

【参考方案1】:

$group之后使用$push累加器得到分组数据的数组

db.accounts.aggregate([
  
    $match:  account:  $in: ["first", "second"]  ,
  ,
  
    $group: 
      _id: "$account",
      data:  $push: "$$ROOT" ,
    ,
  
]);

【讨论】:

上述查询在 RoboMongo 中运行良好,但是当我尝试将其添加到我的节点存储库时,我得到以下类型的异常参数 ' $match: account: $in: any; ; ; ' 不能分配给“any[]”类型的参数。对象字面量只能指定已知属性,而 '$match' 不存在于类型 'any[]' 中。 看起来你正在使用打字稿?请显示您的完整代码 代码在评论中很难发,所以我在***.com/questions/61205171/…下面新建了一个问题 我只有一个查询,如果我想将数据属性更改为帐户类型,比如它应该首先出现而不是数据,其次我尝试给它 _id / "$account " 但它不起作用。 使用另一个项目阶段。 $project: account: "$_id", data: 1

以上是关于在 mongoDB 中通过属性构建进行分组的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB基础教程系列--第七篇 MongoDB 聚合管道

在 Mongodb 中通过 ObjectId 查找有多快?

在 MongoDB 中通过 PHP 使用 NotIn 和正则表达式

如何在 GCC 中通过优化构建发布模式?

如何在R中通过分组变量统计有值的列数?

如何在数组的 mongodb 的子字段中进行聚合和分组?