Mongo:将返回的记录限制为切片的增量计数

Posted

技术标签:

【中文标题】Mongo:将返回的记录限制为切片的增量计数【英文标题】:Mongo: Limit returned records to an incremental count on slice 【发布时间】:2017-03-01 13:02:44 【问题描述】:

我在节点项目中使用猫鼬,我有以下查询:

var query = Model.aggregate(
         $match:  id: id  ,
         $sort:  created: -1  ,
        
            $project: 
                name: true,
                number: true,
                created: true,
                status: true,
                time: true,
                array_data:  $slice: ['$array_data', 5] 
            
        
    )

我认为 slice 会根据 array_data 字段中有多少记录将我的整个记录​​限制为 5,但它只限制了返回的 array_data 元素的数量。

我希望做的是:

假设我的模型中的记录 1 在 array_data 中有 10 个元素 我的模型中的记录 2 在 array_data 中有 15 个元素。

我希望能够切片或使用其他一些函数,因此当我使用 20 的“限制”查询我的模型时,它会返回第一个集合及其在 array_data 中的所有 10 个元素以及第二个集合及其前 10 个array_data 中的记录等于 20 的“限制”。

这对 Mongo 有可能吗?

【问题讨论】:

【参考方案1】:

使用unwind解构文档,然后限制再分组

var query = Model.aggregate(
         $match:  id: id  ,
         $sort:  created: -1  ,
         $unwind: '$array_data' ,
         $limit: 20 ,
        
          $group: 
            _id: 
              name:'$name',
              number: '$number',
              created: '$created',
              status: '$status',
              time: '$time'
            ,
            array_data: 
              $push: '$array_data'
            
          
        ,
        
            $project: 
                name: '$_id.name',
                number: '$_id.number',
                created: '$_id.created',
                status: '$_id.status',
                time: '$_id.time',
                array_data: 1,
                _id: 0
            
        
    )

【讨论】:

有趣的方法,我必须试试这个,谢谢。 你知道这个效率吗?

以上是关于Mongo:将返回的记录限制为切片的增量计数的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring 中将自动增量 @Id 限制为 6 位

Mongo 聚合游标和计数

有记录吗?计数 vs 限制 vs 嵌套

js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制

在工作台中查看查询结果的长度(计数)

SQL 限制平均值