Канал MongoDB (Golang), возвращающий только одно поле из четырех внутри документа - PullRequest
0 голосов
/ 16 апреля 2019

Я пытался вывести данные, полученные из поиска, используя пакет 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, откуда я получаю данные:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...