为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
杨__羊羊 2022-06-21 16:32:58
我有以下查询: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.谢谢!
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

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})


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号