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

Posted

技术标签:

【中文标题】如何查询 mongoose 中数组长度最大的条目?【英文标题】:How can I query for the entry or entries with the greatest array length in mongoose? 【发布时间】:2020-04-22 07:32:48 【问题描述】:

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

假设我有模特const Model = require('./myModel');

【问题讨论】:

【参考方案1】:

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

然后你可以做一个简单的查询,比如:

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

myPropertyLength 字段上创建索引以加快此操作。

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

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

最后,这种方法只是复制了更简单的方法,只是效率低了很多。此外,您不能在此聚合上使用任何索引,因此与简单方法相比,这可能是一个非常昂贵的操作。

【讨论】:

以上是关于如何查询 mongoose 中数组长度最大的条目?的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 模式:如何设置数组中的最大项目数?

查看单个文档的数组时,mongoose .find() 没有结果

如何使用 Mongoose 查询过滤到数组类型字段中具有指定值的文档?

在数组中填充有限数量的项目,但保持数组长度 - mongoose

如何使用 mongoose 从 refs 获取数组

如何在 Mongoose 中找到与数组字段的最后一个元素与给定查询值匹配的所有文档?