2 回答
TA贡献1786条经验 获得超11个赞
此代码有效。经过几个小时的尝试,感谢好运,我设法解决了这个问题。也许有人会解释这个?
而不是bson.Raw我使用bson.M和result.Decode()而不是result.DecodeBytes() 现在我有与 nodejs 给我相同的输出。
var docs []bson.M
for result.Next(ctx) {
var document bson.M
err = result.Decode(&document)
if err != nil {
log.Println(err)
}
docs = append(docs, document)
}
return docs
TA贡献1818条经验 获得超7个赞
你也可以使用这个:
var results []bson.M
if err := cursor.All(context.TODO(), &results); err != nil {
log.Panic(err)
}
并查看结果或转换为 json 使用此:
res, _ := json.Marshal(results)
fmt.Println(string(res))
如果你想自己做,你可以这样做:
var convertedResult []map[string]interface{}
for _, item := range results {
convertedItem := make(map[string]interface{})
for key, val := range item {
switch v := val.(type) {
case primitive.ObjectID:
convertedItem[key] = v.Hex()
case bson.M:
subMap := make(map[string]interface{})
for subKey, subVal := range v {
subMap[subKey] = subVal
}
convertedItem[key] = subMap
case bson.A:
subArray := make([]interface{}, len(v))
for i, subVal := range v {
subArray[i] = subVal
}
convertedItem[key] = subArray
default:
convertedItem[key] = v
}
}
convertedResult = append(convertedResult, convertedItem)
}
jsonBytes, err := json.Marshal(convertedResult)
if err != nil {
panic(err)
}
jsonString := string(jsonBytes)
fmt.Println(jsonString)
- 2 回答
- 0 关注
- 146 浏览
添加回答
举报