文档中的每个条目都包含一个属性myProperty : [Number]
。我想返回myProperty
数组具有最大长度的条目,或者如果有多个数组具有最大长度,则返回其中的任何一个。我怎样才能做到这一点?
说我有一个模型const Model = require('./myModel');
答案 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}
])
最后,此方法只是复制较简单的方法,而效率大大降低。同样,您不能在此聚合上使用任何索引,因此与简单方法相比,这可能是一个非常昂贵的操作。