如何制定适当的mongo查询以获取正确格式的记录

时间:2018-11-27 05:55:57

标签: mongodb go mgo

在这里,我要查询一个根据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 shell中尝试了以下查询:-

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 :(得分:0)

希望我能理解你的问题。

我认为您正在尝试执行以下操作。

  • 从mongo获取一些数据(您似乎已经了解了)
  • 将其送去进行进一步处理
  • 按父级和顺序对其进行排序

当您说“绑定数据”时,可能意味着对数据结构进行了编组。为此,您将需要一个结构来支持您的数据。这是从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”更好的名称。

要取消编组,请获取JSON并将其设置为字符串,例如s

创建一个包含对象的数组

var obj []Obj

并执行类似的操作:

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

之后,您可以按照自己的喜好对其进行排序。

这是Go文档排序的链接。 https://golang.org/pkg/sort/