3

我正在尝试使用 mongo-go-driver (Golang 的 MongoDB 团队驱动程序)进行聚合,但我看不出我在这里做错了什么:

// group
group, e := bson.ParseExtJSONObject(`
    {
      "$group": {
        "_id":{
          "ProductCode":"$ProductCode",
          "Dir":"$Dir",
          "WharehouseID":"$WharehouseID"
        }
      }
    }
`)


cursor, e := myCollection.Aggregate(
    context.Background(),
    group,
)

// e output: "(Location40324) Unrecognized pipeline stage name: '_id'"

这是一个 mongodb 错误,但是如果我在 mongodb 本机客户端中执行此查询,我会得到结果并且不会发生错误。

4

2 回答 2

1

我得到了它!

我犯了两个错误:

1 - 我必须解析 JSON 对象数组

2 - 关闭“`”之前没有新行

这是工作示例:

    group, e := bson.ParseExtJSONArray(`[{
      "$group": {
        "_id":{
          "ProductCode":"$ProductCode",
          "Dir":"$Dir",
          "WharehouseID":"$WharehouseID"
        }
      }
    }]`)

    cursor, e := myCollection.Aggregate(
       context.Background(),
       group,
    )
于 2018-08-22T17:01:14.513 回答
1

除了解析一串MongoDB 扩展 JSON来构建聚合管道之外,您还可以构造一个bson.Array对象(类型化):

例如:

pipeline := bson.NewArray(
    bson.VC.DocumentFromElements(
        bson.EC.SubDocumentFromElements(
            "$group",
            bson.EC.SubDocumentFromElements(
                "_id",
                bson.EC.String("ProductCode","$ProductCode"),
                bson.EC.String("Dir","$Dir"),
                bson.EC.String("WharehouseID","$WharehouseID"),
            ),
        ),
    ),
)
cursor, err := collection.Aggregate(context.Background(), pipeline)

上面的代码片段与当前的mongo-go-driver 版本 0.0.12兼容

于 2018-08-27T01:38:34.440 回答