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数组。

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

A pipeline stage specification object must contain exactly one field.

谢谢!

MongoDB管道中的每个元素都必须是一个阶段,例如$match$group等。

您的group元素包含两个阶段:$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})

最新更新