как сформулировать правильный запрос монго, чтобы получить записи в правильном формате - PullRequest
0 голосов
/ 27 ноября 2018

Здесь я хочу сделать запрос, который связывает данные в соответствии с parent.Я получаю объекты ниже:

{
  "_id" : 1,
  "name" : "home",
  "slug" : "home",
  "parent" : 0,
  "description" : "this will direct you on home page",
  "order" : 1,
  "taxonomy" : "nav_bar"
}
{
  "_id" : 2,
  "name" : "Links",
  "slug" : "links",
  "parent" : 0,
  "description" : "this will direct you on home page",
  "order" : 2,
  "taxonomy" : "nav_bar"
}
{
  "_id" : 3,
  "name" : "Link1",
  "slug" : "link1",
  "parent" : 2,
  "description" : "this will direct you on home page",
  "order" : 1,
  "taxonomy" : "nav_bar"
}
{
  "_id" : 4,
  "name" : "Link2",
  "slug" : "link2",
  "parent" : 2,
  "description" : "this will direct you on home page",
  "order" : 2,
  "taxonomy" : "nav-bar"
}
{
  "_id" : 5,
  "name" : "extra Link",
  "slug" : "extra-link",
  "parent" : 0,
  "description" : "this will direct you on home page",
  "order" : 3,
  "taxonomy" : "nav-bar"
}
{
  "_id" : 6,
  "name" : "extra Link1",
  "slug" : "extra-link1",
  "parent" : 5,
  "description" : "this will direct you on home page",
  "order" : 1,
  "taxonomy" : "nav-bar"
}
{
  "_id" : 7,
  "name" : "extra Link2",
  "slug" : "extra-link2",
  "parent" : 5,
  "description" : "this will direct you on home page",
  "order" : 2,
  "taxonomy" : "nav-bar"
}

Как я получу эти данные, используя golang в соответствии с полем parent и полем order, что они расположены в отсортированном порядке, а также следуют за дочерним родителемиерархия.Сейчас я просто извлекаю все данные, используя db.CollectionName.find().pretty().Но теперь мне нужно упорядочить это по полю заказа, а также по родительской дочерней иерархии.

Я пробовал запрос ниже в оболочке mongodb: -

db.CollectionName.find().pretty()

он покажет мне полные данные.Но мне нужно, например, сначала запись, имеющая _id:1, parent:0, order:1, затем она будет отображаться вверху, а запись, имеющая _id:2, parent:0, order:2, она будет отображаться на секунду, в третьей записи она будет иметь _id:3, parent:2, order:1, тогда она будет отображаться сразу за секундой записи, потому чтоего родитель - _id:2 по порядку.

1 Ответ

0 голосов
/ 27 ноября 2018

Надеюсь, я понимаю ваш вопрос.

Я думаю, что вы пытаетесь сделать следующее.

  • получить некоторые данные от Монго (кажется, что вы их охватили)
  • получить их на ходу длядальнейшая обработка
  • сортировка по родителю и порядку

Когда вы говорите «связывание данных», вы можете иметь в виду не маршализацию структуры данных.Для этого вам понадобится структура для поддержки ваших данных.Вот предложение, автоматически сгенерированное из JSON-to-Go :

type Obj struct {
ID          int    `json:"_id"`
Name        string `json:"name"`
Slug        string `json:"slug"`
Parent      int    `json:"parent"`
Description string `json:"description"`
Order       int    `json:"order"`
Taxonomy    string `json:"taxonomy"`
} 

Возможно, вы захотите переименовать структуру лучше, чем 'Obj'.

Чтобы разобрать getJSON и установите его в строку, например s.

создайте массив, содержащий ваши объекты

var obj []Obj

и сделайте что-то вроде:

err := json.Unmarshal([]byte(s), &obj)

после этого вы можете сортировать его по своему усмотрению.

Вот ссылка на документы Go для сортировки.https://golang.org/pkg/sort/

...