【发布时间】:2020-04-22 07:32:48
【问题描述】:
我文档中的每个条目都包含一个属性myProperty : [Number]。我想返回 myProperty 数组长度最大的条目,或者如果有多个长度最大的条目,则返回其中任何一个。我怎样才能做到这一点?
假设我有模特const Model = require('./myModel');
【问题讨论】:
标签: database mongodb mongoose mongoose-schema
我文档中的每个条目都包含一个属性myProperty : [Number]。我想返回 myProperty 数组长度最大的条目,或者如果有多个长度最大的条目,则返回其中任何一个。我怎样才能做到这一点?
假设我有模特const Model = require('./myModel');
【问题讨论】:
标签: database mongodb mongoose mongoose-schema
最简单的方法:每次更新列表时,在单独的字段中记录myProperty 的长度。例如,在名为myPropertyLength 的字段中。
然后你可以做一个简单的查询,比如:
db.collection.find({}).sort({myPropertyLength: -1}).limit(1)
在myPropertyLength 字段上创建索引以加快此操作。
复杂的方式:使用聚合添加一个计算数组长度的字段:
db.collection.aggregate([
{$addFields: {myLength: {$size: '$myProperty'}}},
{$sort: {myLength: -1}},
{$limit: 1}
])
最后,这种方法只是复制了更简单的方法,只是效率低了很多。此外,您不能在此聚合上使用任何索引,因此与简单方法相比,这可能是一个非常昂贵的操作。
【讨论】: