【问题标题】:Extracting unique objects using mongoldb使用 mongoldb 提取唯一对象
【发布时间】:2021-02-27 23:13:41
【问题描述】:

我尝试为 MongoDB 构建一个查询,该查询通过键值 (batch_id) 从文档中的数组返回所有唯一值。我已经成功地做到了这一点,对唯一的batch_ids 进行分组,但是我无法提取相应的键值 (batchName) 并计算每个数组中具有唯一值的对象的数量。

如何提取batchName 并计算对象的数量?我尝试了一些方法,但我认为$addToSet 有问题。

MongoPlayground:https://mongoplayground.net/p/j6Jkeh79Zqq

我目前的输出是:

[
  {
    "_id": "6032a5ad80443334a35f2232",
    "batchData": [
      {
        "batch_id": "6032a5af80443334a35f2267TB"
      },
      {
        "batch_id": "6032a5af80443334a35f26467JC"
      },
      {
        "batch_id": "6032a5af80443334a5f74367UI"
      }
    ]
  }
]

我的预期输出是

    [
      {
        "_id": "6032a5ad80443334a35f2232",
        "batchData": [
          {
            "batch_id": "6032a5af80443334a35f2267TB",
            "batchName": "Test 2",
            "count": 2
          },
          {
            "batch_id": "6032a5af80443334a35f26467JC",
            "batchName": "Test 3",
            "count": 1
          },
          {
            "batch_id": "6032a5af80443334a5f74367UI",
            "batchName": "Test 1",
            "count": 2
          }
        ]
      }
    ]

示例文档:

[
  {
    "_id": "6032a5ad80443334a35f2232",
    "List": [
      {
        "_id": "6032a5af80443334a35f2234",
        "batch_id": "6032a5af80443334a5f74367UI",
        "batchName": "Test 1",
        
      },
      {
        "_id": "6032a5b080443334a35f2236",
        "batch_id": "6032a5af80443334a5f74367UI",
        "batchName": "Test 1",
        
      },
      {
        "_id": "6032a5b080443334a35f2238",
        "batch_id": "6032a5af80443334a35f2267TB",
        "batchName": "Test 2",
        
      },
      {
        "_id": "6032a5b080443334a35f2239",
        "batch_id": "6032a5af80443334a35f2267TB",
        "batchName": "Test 2",
        
      },
      {
        "_id": "6032a5b080443334a35f2234",
        "batch_id": "6032a5af80443334a35f26467JC",
        "batchName": "Test 3",
        
      }
    ]
  }
]

Mongo 查询:

db.collection.aggregate([
  {
    $project: {
      batchData: {
        batch_id: "$List.batch_id",
        
      },
      
    },
    
  },
  {
    $unwind: "$batchData.batch_id"
  },
  {
    $group: {
      _id: "$_id",
      batchData: {
        $addToSet: "$batchData"
      },
      
    },
    
  },
  
])

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以先$unwind 将阵列展平以便于处理。之后,您可以再次$group 数据并使用$first 获取batchName。最后,您可以再执行一次$group 以格式化为您期望的格式。

    这是Mongo playground 供您参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多