我试图使用mgo / pkg软件包转储从查找中接收到的数据,但是当我接收数据时,转储并返回,我得到以下输出:
[
{
"_id": "",
"timerId": "",
"content": "task1",
"creationDate": 0
},
{
"_id": "",
"timerId": "",
"content": "task2",
"creationDate": 0
},
{
"_id": "",
"timerId": "",
"content": "task3",
"creationDate": 0
}
]
使用fmt打印:
[{ObjectIdHex("") ObjectIdHex("") task1 0} {ObjectIdHex("") ObjectIdHex("") task2 0} {ObjectIdHex("") ObjectIdHex("") task3 0}]
正在执行此操作的代码:
func (m *MongoDbRepository) GetTasksOnTheSameDateAsUserTimers(userId string)([]model.Task, error) {
var tasks []model.Task
// m.Db.Session.DB("project").C("tasks")
pipe := m.Db.C("tasks").Pipe([]bson.M{
// bson.M{
// "$lookup": bson.M{
// "from": "times",
// "localField": "timerId",
// "foreignField": "_id",
// "as": "timers",
// },
// },
// bson.M{
// "$lookup": bson.M{
// "from": "users",
// "localField": "timers.userId",
// "foreignField": "_id",
// "as": "userTasks",
// },
// },
// bson.M{
// "$project": bson.M{
// "timers": 0,
// },
// },
// bson.M{
// "$match": bson.M{
// "_id":bson.ObjectIdHex("5cb58c5c4d11610c20b52f1a"),
// },
// },
})
err := pipe.All(&tasks)
fmt.Println(tasks)
return tasks, err
}
我已注释了所有内部管道,因为无法正确获取管道结果,因此无法执行查找。我知道这是转储数据错误,因为如果我这样更改结尾行:
var tasksDump []interface{}
err := pipe.All(&tasksDump)
fmt.Println(tasksDump)
然后是输出:
[map[_id:ObjectIdHex("5cb58c5c4d11610c20b52f1a") content:task1 creationDate:1555400713 timerId:ObjectIdHex("5cb5880891b3fb1e2830b743")] map[_id:ObjectIdHex("5cb58ccd4d11610c20b52f1b") content:task2 creationDate:1555400714 timerId:ObjectIdHex("5cb5880891b3fb1e2830b743")] map[_id:ObjectIdHex("5cb58d074d11610c20b52f1c") content:task3 creationDate:1555400700 timerId:ObjectIdHex("5cb5880891b3fb1e2830b743")]]
所以数据到了,但是解析时我遇到了问题。为什么只有内容字段才能正确解析?
我要从查找转储数据的结构的代码:
type Task struct {
Id bson.ObjectId `json:"_id" bson:"_id"`
TimerId bson.ObjectId `json:"timerId" bson:"timerId"`
Content string `json:"content" bson:"content"`
CreationDate int64 `json:"creationDate" bson:"creationDate"`
}
我从那里接收数据的MongoDB集合: