Пн go: запрос для получения списка объектов, который соответствует нескольким критериям - PullRequest
0 голосов
/ 30 марта 2020

У меня проблема с написанием запроса для получения данных из моей структуры. Я должен сделать запрос, используя несколько критериев. Мои критерии: идентификатор, срок, цена, темы. Например, запросить мою структуру, используя:

Критерии:

 id: [ObjectId("234434")]
 term: "24"
 price: 80 // return only this data that have price lower than 80
 topics: ["topic1", "topic2", "topic3"]

Это моя сокращенная и упрощенная структура базы данных:

{
   "_id":{
      "$oid":"234434"
   },
   "name":"name1",
   "posts":[
      {
         "name":"post1",
         "price":{
            "$numberDouble":"17.5"
         },
         "term":"24",
         "topics":[
            {
               "name":"topic1",
               "desc":"desc"
            },
            {
               "name":"topic23423",
               "desc":"desc"
            }
         ],
         "extraPosts":[
            {
               "name":"extra post 1",
               "description":"desc extra ",
               "topics":[
                  {
                     "name":"topic2",
                     "desc":"desc"
                  },
                  {
                     "name":"topic566566",
                     "desc":"desc"
                  }
               ]
            },
            {
               "name":"extra post 2",
               "description":"desc extra ",
               "topics":[
                  {
                     "name":"topic3",
                     "desc":"desc"
                  },
                  {
                     "name":"topic56656566",
                     "desc":"desc"
                  }
               ]
            },
            {
               "name":"extra post 3",
               "description":"desc extra ",
               "topics":[
                  {
                     "name":"topic4324",
                     "desc":"desc"
                  },
                  {
                     "name":"topic56623456566",
                     "desc":"desc"
                  }
               ]
            }
         ]
      }
   ]
}

Запрос должен вернуть все сообщения с темами поиска, если сообщений нет, выполнить поиск по дополнительным сообщениям и вернуть основные и дополнительные сообщения, содержащие темы поиска. Поэтому сначала ограничьте структуру, отфильтровав ее по идентификатору, затем по термину, затем по цене и, наконец, по темам. Так что в этом случае он должен вернуть:

{
   "_id":{
      "$oid":"234434"
   },
   "name":"name1",
   "posts":[
      {
         "name":"post1",
         "price":{
            "$numberDouble":"17.5"
         },
         "term":"24",
         "topics":[
            {
               "name":"topic1",
               "desc":"desc"
            },
            {
               "name":"topic23423",
               "desc":"desc"
            }
         ],
         "extraPosts":[
            {
               "name":"extra post 1",
               "description":"desc extra ",
               "topics":[
                  {
                     "name":"topic2",
                     "desc":"desc"
                  },
                  {
                     "name":"topic566566",
                     "desc":"desc"
                  }
               ]
            },
            {
               "name":"extra post 2",
               "description":"desc extra ",
               "topics":[
                  {
                     "name":"topic3",
                     "desc":"desc"
                  },
                  {
                     "name":"topic56656566",
                     "desc":"desc"
                  }
               ]
            }
         ]
      }
   ]
}

Поскольку пост1 имеет тему1 и все искомые темы в extraPosts: дополнительный пост 1, дополнительный пост 2. Он не должен возвращаться в пост1, дополнительный пост с именем: дополнительный пост 3, поскольку он не содержит одного из найденных topi c. Если все темы не в сообщении, а в его дополнительных сообщениях, то не возвращайте это сообщение. Если бы все топки были в дополнительном посте 1 и дополнительном посте 1, а в посте 1 не было бы искомых топи c, он также должен вернуть post1 с extraPosts: дополнительный пост 1, дополнительный пост 2. В моей реальной структуре есть много объектов с идентификатором и много сообщений.

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