Mongodb 在upsert中使用mgo聚合迭代器数据而不进行解组
首先,我是新来的:) 我正在尝试使用go和mgo驱动程序在mongo中进行聚合+升级 我的代码如下所示:Mongodb 在upsert中使用mgo聚合迭代器数据而不进行解组,mongodb,go,mgo,Mongodb,Go,Mgo,首先,我是新来的:) 我正在尝试使用go和mgo驱动程序在mongo中进行聚合+升级 我的代码如下所示: 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:
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)
//
}
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)
}
来自聚合集合的响应可以有很多格式,因此我无法为其定义结构
我只需要从响应中获取一个字段,它是sha1,然后根据sha1条件使用收到的响应更新另一个集合
有人能给我指出正确的方向吗?也许我误解了你的意思,但是你可以通过
地图访问返回的文档。大概是这样的:
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)
//
}
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)
}
在这种情况下,interface
是一个不错的选择。你能给我更多的细节吗?可能就是这样。我仍然得到无效操作:结果[“value”][“sha1”](类型接口{}不支持索引)
@Petru您能发布fmt.Printf的结果(“%+v\n”,resp)
?看起来你的resp
不是bson.M
,这很奇怪。map[提取的文件:文件信息:map[文件大小:235933文件类型\u描述:Win32…
我的错误在编译时我可以打印结果[“值”]
结果[“值”][“sha1”]
抛出无效操作。@Petru try结果[“值”](bson.M)[“sha1”]