将序数字段添加到MongoDB聚合

时间:2017-03-23 03:18:55

标签: mongodb

我有一个 tasks 集合,其中每个任务都有唯一的优先级。我想从Mongo中检索这些任务,这样任何过滤后的子集都会有相对优先级0到 number_of_filtered_objects -1。

当我按任何可排序字段对筛选的任务(需要新的DB调用)进行排序时,任务的相对优先级不应更改(假设DB内容未更改)。

我的灵魂,如下面的Go代码所示,使用$ sort,$ group和$ unwind阶段将序数字段注入每个文档。

这有点不合适,所以我想知道是否有更好的方法。

err = collection.Pipe(
    []bson.M{
        {"$match": filter},
        // Start of stages to inject ordinal
        {"$sort": bson.M{"priority": 1}},
        {
            "$group": bson.M{
                "_id":      0,
                "document": bson.M{"$push": "$$ROOT"},
            },
        },
        {
            "$unwind": bson.M{
                "path":              "$document",
                "includeArrayIndex": "relative_priority",
            },
        },
        // Ordinal has now been injected
        {
            "$group": bson.M{
                "_id":               "$document._id",
                "title":             bson.M{"$first": "$document.title"},
                "priority":          bson.M{"$first": "$document.priority"},
                "relative_priority": bson.M{"$first": "$relative_priority"},
            },
        },
        {"$sort": transformSort(sortField, sortOrder)},
        // snipped additional stages to perform pagination
        },
    },
)

0 个答案:

没有答案
相关问题