我在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顺序对其进行排序? 任何帮助都是好的。先谢谢了
答案 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"}}
])