【问题标题】:Mongo: Limit returned records to an incremental count on sliceMongo:将返回的记录限制为切片的增量计数
【发布时间】: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 有可能吗?

【问题讨论】:

    标签: javascript node.js mongodb mongoose aggregation-framework


    【解决方案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
                }
            }
        )
    

    【讨论】:

    • 有趣的方法,我必须试试这个,谢谢。
    • 你知道这个效率吗?
    猜你喜欢
    • 2010-09-05
    • 2017-07-25
    • 2011-12-20
    • 2010-11-05
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多