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:将返回的记录限制为切片的增量计数的主要内容,如果未能解决你的问题,请参考以下文章