猿问

MongoDB 管道中的多个顶级聚合查询

我有以下查询:


match := bson.D{{"$match", bson.D{{"venue", venueID}}}}

group := bson.D{{"$lookup", bson.M{

    "from":         "labels",

    "localField":   "label_ids",

    "foreignField": "_id",

    "as":           "labels",

}}, {"$graphLookup", bson.M{

    "from":             "menus",

    "startWith":        "$child_ids",

    "connectFromField": "child_ids",

    "connectToField":   "_id",

    "as":               "children",

    "maxDepth":         5,

    "depthField":       "level",

}}}


cur, err := m.collection.Aggregate(ctx, mongo.Pipeline{group, match})

我有两个关系字段,其中一个是图形结构(菜单),每个父元素都有一个每个子元素的 ID 数组。


第二个字段,标签,只是一个一对多的查询。标签和菜单应该是可重复使用的,因此不会嵌入到单个父实体中。上面概述的查询对我来说很有意义,但是我收到以下错误:


A pipeline stage specification object must contain exactly one field.


谢谢!


杨__羊羊
浏览 213回答 1
1回答

达令说

MongoDB 管道中的每个元素都必须是单个阶段,例如$match,$group等。您的group元素包含 2 个阶段:$lookup和$graphLookup.拆分它们并单独列出它们:match := bson.D{{"$match", bson.D{{"venue", venueID}}}}group := bson.D{{"$lookup", bson.M{    "from":         "labels",    "localField":   "label_ids",    "foreignField": "_id",    "as":           "labels",}}}graphLookup := bson.D{{"$graphLookup", bson.M{    "from":             "menus",    "startWith":        "$child_ids",    "connectFromField": "child_ids",    "connectToField":   "_id",    "as":               "children",    "maxDepth":         5,    "depthField":       "level",}}}cur, err := m.collection.Aggregate(ctx, mongo.Pipeline{group, graphLookup, match})
随时随地看视频慕课网APP

相关分类

Go
我要回答