首页 > 解决方案 > 如何在 mongodb 的数组中对嵌入的对象进行分组

问题描述

我有这种形式的文件:

Item:[{
  product:"shovel"
  price: 100
  dateAdded: 2018-11-28 18:28:12.356
 }
 {
  product:"wheel barrow"
  price: 500
  dateAdded: 2018-11-28 18:28:12.357
 }
 {
  product:"Boot"
  price: 500
  dateAdded: 2018-11-29 18:29:12.357
 }
]

我想根据添加日期对数组中的对象进行分组,即生成表单:

Item:[
 [
  {

  product:"Shovel"
  price: 100
  dateAdded: 2018-11-28 18:28:12.356
 }
 {
  product:"Wheel barrow"
  price: 500
  dateAdded: 2018-11-28 18:28:12.357
 }
 ]
 [
  {
   product:"Boot"
   price: 500
   dateAdded: 2018-11-29 18:29:12.357
 }
 ]
]

关于使用 mongodb 的聚合查询的任何想法

标签: mongodbaggregation-framework

解决方案


您可以分组$dayOfYear并使用$dateFromString这样的方式从您那里获取日期string

db.collection.aggregate([
  {
    "$group": {
      "_id": {
        $dayOfYear: {
          $dateFromString: {
            dateString: "$dateAdded"
          }
        }
      },
      "data": {
        "$push": "$$CURRENT"
      }
    }
  },
  {
    $project: {
      _id: 0
    }
  }
])

结果将是:

[
  {
    "data": [
      {
        "_id": ObjectId("5a934e000102030405000002"),
        "dateAdded": "2018-11-29 18:29:12.357",
        "price": 500,
        "product": "Boot"
      }
    ]
  },
  {
    "data": [
      {
        "_id": ObjectId("5a934e000102030405000000"),
        "dateAdded": "2018-11-28 18:28:12.356",
        "price": 100,
        "product": "shovel"
      },
      {
        "_id": ObjectId("5a934e000102030405000001"),
        "dateAdded": "2018-11-28 18:28:12.357",
        "price": 500,
        "product": "wheel barrow"
      }
    ]
  }
]

然后,您可以使用 JSArray.reduce等将其简单地展平。


推荐阅读