首先,我很陌生:)
我正在尝试使用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条件更新收到响应的另一个集合。
有人能指出我正确的方向吗?
答案 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)
}