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

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

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

【问题讨论】:

    标签: database mongodb mongoose mongoose-schema


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多