在MongoDB中,如何只将必需的字段投影到MongoDB中的嵌入对象中,其中键将是来自同一文档的选定字段的值,并根据类似的字段值对它们进行分组 如果您看到下面预期的结果,相同的car_id必须分组,值必须是ObjectId的键-值对,只有我想要的选定字段,即accessories. 让我们假设我想要使用具有hondabrand进行匹配 下面是我Collection 的名为CARS的文档

{
_id : '1'
car_id : 'A'
brand : 'honda'
accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}] 
},
{
_id : '2'
car_id : 'A'
brand : 'honda'
accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}] 
},
{
_id : '3'
car_id : 'B'
brand : 'honda'
accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}] 
}
{
_id : '4'
car_id : 'C'
brand : 'honda'
accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}] 
}

以下是我所期待的结果

{
 'A' : {
          '1': {accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}]}
          '2': {accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}]}
       },

'B' : {
          '3': {accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}]}
       },
'C' : {
          '4': {accessories : [{parts:6, name:'speaker'},{parts:2, name:'headlight'}]}
       },
}

Am getting this below error

推荐答案

  1. $group-按car_id分组.使用包含k(_id)和v(accessories数组)字段的文档设置cars数组字段.

  2. $group-按null分组,以便将所有文档合并为一个文档.使用文档k(car_id)和v(来自cars的键值对)数组设置data数组字段.

  3. $replaceRoot-通过将data数组转换为键-值对,将输入文档替换为新文档.

db.collection.aggregate([
  {
    $group: {
      _id: "$car_id",
      cars: {
        $push: {
          k: "$_id",
          v: {
            accessories: "$accessories"
          }
        }
      }
    }
  },
  {
    $group: {
      _id: null,
      data: {
        $push: {
          k: "$_id",
          v: {
            $arrayToObject: "$cars"
          }
        }
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: {
        $arrayToObject: "$data"
      }
    }
  }
])

Demo @ Mongo Playground

Mongodb相关问答推荐

在MongoDB查询中添加来自另一个集合的匹配文档的计数

MongoDB Aggregate:查找每个月的交叉日期范围的数量

在MondoDB中:将对象数组从切片索引数组切片,并通过聚合推入数组

MongoDB MQL,将列表一分为二,仅获取唯一值

MongoDB - 使用许多嵌套对象更新嵌套数组

Mongodb聚合查找异常值

没有mongoose 的 Express 和 MongoDB

在 mongodb 聚合中的阶段之后输出具有序列数字 id 的新集合

Meteor 中的平均聚合查询

如何使用 mongoose 从 MongoDb 获取数据?

什么 Javascript 库可以针对对象判断类似 MongoDB 的查询谓词?

mongo php副本连接非常慢

如何使用 MongoDB 建模 likes投票系统

MongoDB Java API:put() 与 append()

mongodb nodejs - 转换圆形 struct

MongoDB限制内存

try 启用 Mongo DB 身份验证时发生 TypeError

MongoDb 聚合 $match 错误:Arguments must be aggregate pipeline operators

MongoDB聚合框架的索引优化

使用 Mongoose ORM 的杀手锏是什么?