MongoDB:查询以获取自定义字段布局

时间:2018-10-28 22:48:52

标签: mongodb mongoose aggregation-framework

我在MongoDB上还很新。我正在尝试从集合中所有文档中的特定对象数组字段中获取值,并将所有这些值放入一个数组中。

null

“我的汽车”文档架构为:

 Cars.aggregate([ { $project : { 'carCrashes.location' : 1 , _id: 0 } } ] )

当使用汇总方式时,我会得到

ownerName: string;
clientCategory: string;
carCrashes: [{  //////////this can be empty in some documents//////////
            dateOfCrash: Date,
            location: string,
            other...
           }]
other...

如果可能的话,我希望它像这样

[
  {
     "carCrashes": [
        {},
        {},
        {},
        {
            "location": "Tokyo, Japan"
        },
        {
            "location": "Moskow, Russia"
        },
        {
            "location": "London, UK"
        }
   ]
},
{
    "carCrashes": []
},
{
    "carCrashes": []
},
{
    "carCrashes": [
        {},
        {},
        {
            "location": "New York, USA"
        }
    ]
}
]

因此,我想获取所有获得的“位置”元素,并将它们像这样放置在数组中,这样我可以更轻松地对它们进行排序和使用这些数据。另外,我如何按ASC顺序对其进行排序? 任何帮助都是好的。先谢谢了

1 个答案:

答案 0 :(得分:0)

您可以使用以下汇总查询。

$match处理汽车文档,其中至少一个carCrashes数组元素具有位置字段。

$filter删除所有不存在位置的数组元素。

$unwind + $sort个位置。

$replaceRoot将位置子文档提升到顶部。

Cars.aggregate([
  {"$match":{"carCrashes.location":{"$exists":true}}},
  {"$project":{
    "carCrashes":{
      "$filter":{
        "input":"$carCrashes",
        "cond":{"$gt":["$$this.location",0]}
      }
    }
  }},
  {"$unwind":"$carCrashes"},
  {"$sort":{"carCrashes.location":1}}
  {"$replaceRoot":{"newRoot":"$carCrashes"}}
])