在不解组的情况下在 upsert 中使用 mgo 聚合迭代器数据

Use mgo aggregate iterator data in upsert without unmarshaling

首先,我是新手:)

我正在尝试使用 go 和 mgo 驱动程序在 mongo 中进行聚合 + upsert。

我的代码看起来像这样:

pipe := c.Pipe([]bson.M{{"$match": bson.M{"name":"John"}}})
iter := pipe.Iter()
resp := []bson.M{}

for iter.Next(&resp) {
     //
     // read "value.sha1" from each response
     // do a:
     // otherCollection.Upsert(bson.M{"value.sha1": mySha1}, resp)
     //
}

聚合集合的响应可以有很多格式,所以我无法为它定义一个结构。

我只需要从响应中获取一个字段,它是一个 sha1,并根据 sha1 条件用收到的响应更新另一个集合。

谁能指出我正确的方向?

也许我误解了你,但你可以简单地以 map 的形式访问返回的文档。像这样:

pipe := c.Pipe([]bson.M{})
iter := pipe.Iter()
resp := bson.M{} // not array as you are using iterator which returns single document

for iter.Next(&resp) {
    otherCollection.Upsert(bson.M{"value.sha1": result["value"].(bson.M)["sha1"]}, resp)
}