我正在mgo与Go一起使用MongoDB。我有以下代码:
mgo
func Find(collectionName, dbName string, query interface{}) (result []interface{}, err error) { collection := session.DB(dbName).C(collectionName) err = collection.Find(query).All(&result) return result, err } func GetTransactionID() (id interface{}, err error) { query := bson.M{} transId, err := Find("transactionId", dbName, query) for key, value := range transId { fmt.Println("k:", key, "v:", value) } }
Output: k:0 v:地图[_id:ObjectIdHex(“ 536887c199b6d0510964c35b”)transId:A000000000]
Output:
我需要从中获取切片中返回的映射值_id和transId的值Find。我怎样才能做到这一点?
_id
transId
Find
我只是在猜测,但万一您只想检索所有 交易 文档并打印它们,方法如下:
假设您有一个struct代表您收藏的文件的结构,例如:
struct
type Transaction struct { Id bson.ObjectId `bson:"_id"` TransactionId string `bson:"transId"` }
您可以使用MongoDB驱动程序(mgo)获得所有文档:
var transactions []Transaction err = c.Find(bson.M{}).All(&transactions) // handle err for index, transaction := range transactions { fmt.Printf("%d: %+v\n", index, transaction) }
加法(通用解)
好吧,在您提供了更多的见解之后,这可能是不使用结构的通用解决方案。尝试编组到BSON文档中bson.M(未测试):
bson.M
var data []bson.M err := c.Find(bson.M{}).All(&data) // handle err for _, doc := range data { for key, value := range doc { fmt.Println(key, value) } }