Mongodb 如何根据数组/对象类型字段对mongo集合进行排序
您好,我是Mongodb 如何根据数组/对象类型字段对mongo集合进行排序,mongodb,Mongodb,您好,我是mongodb的新手我想根据字段对集合进行排序,字段是数组/对象,例如,一个用户可以有很多车 { "_id" : ObjectId("5a7428a4408437d7155bbde7"), "firstName" : "some user", "lastName" : "some user", "phone" : some_phone, "__v" : 0, "cars" : { "car_id_1" : { "_id" : "5a741201408
mongodb的新手
我想根据字段对集合进行排序,字段是数组/对象,例如,一个用户可以有很多车
{
"_id" : ObjectId("5a7428a4408437d7155bbde7"),
"firstName" : "some user",
"lastName" : "some user",
"phone" : some_phone,
"__v" : 0,
"cars" : {
"car_id_1" : {
"_id" : "5a741201408437d7155bbdcd",
"name" : "1st vehicle",
"vNumber" : "4tvechicle",
"maxCapacity" : 34
},
"car_id_2" : {
"_id" : "5a7412bc408437d7155bbdde",
"name" : "2nd vehicle",
"vNumber" : "78opsd",
"maxCapacity" : 54
}
}
}
在这种情况下,该用户有两辆车。我如何根据谁拥有最多的车进行排序?如果您使用的是mongo v3.4+,您可以在聚合管道下面进行尝试
$objectToArray
将cars
转换为数组,并$size
获取cars数组大小
db.cols.aggregate(
[
{$addFields: {count : {$size : {$ifNull : [{$objectToArray : "$cars"}, []]}}}},
{$sort: {count : -1 }}
]
)
mongo v3.2版您可能需要使用
mapReduce
,如果可能,请将cars更改为数组。在这种情况下,必须使用$ifNull
。。请使用$ifnull更新