如何查询猫鼬中数组长度最大的条目?

时间:2020-01-03 18:32:28

标签: database mongodb mongoose mongoose-schema

文档中的每个条目都包含一个属性myProperty : [Number]。我想返回myProperty数组具有最大长度的条目,或者如果有多个数组具有最大长度,则返回其中的任何一个。我怎样才能做到这一点?

说我有一个模型const Model = require('./myModel');

1 个答案:

答案 0 :(得分:0)

最简单的方法:每次更新列表时,在单独的字段中记录myProperty的长度。例如,在名为myPropertyLength的字段中。

然后,您可以执行以下简单查询:

db.collection.find({}).sort({myPropertyLength: -1}).limit(1)

myPropertyLength字段上创建索引,以使此操作更快。

复杂的方式:使用聚合添加一个计算数组长度的字段:

db.collection.aggregate([
  {$addFields: {myLength: {$size: '$myProperty'}}},
  {$sort: {myLength: -1}},
  {$limit: 1}
])

最后,此方法只是复制较简单的方法,而效率大大降低。同样,您不能在此聚合上使用任何索引,因此与简单方法相比,这可能是一个非常昂贵的操作。