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更新