在upsert中使用mgo聚合迭代器数据而不进行解组

时间:2016-07-23 09:45:07

标签: mongodb go mgo

首先,我很陌生:)

我正在尝试使用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条件更新收到响应的另一个集合。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

也许我误解了您,但您可以简单地将返回的文档作为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)
}