MongoDB - получайте данные из ID на лету

У меня есть эти образцы данных

Сообщения

[{
 _id: ObjectId("507f1f77bcf86cd799439011"),
 name: 'Foo'
},
{
 _id: ObjectId("507f191e810c19729de860ea"),
 name: 'Bar'
},
{
 _id: ObjectId("5b8797747ea41163b7eb51b0"),
 name: 'FooBar'
}]

Категории

[{
 _id: ObjectId("5b87979c10397d6c12d69513"),
 name: 'Funny',
 type: 1
},
{
 _id: ObjectId("5b8797ab24098febfb05abdd"),
 name: 'Sad',
 type: 1
},
{
 _id: ObjectId("5b8797b24e31ebf7603f3c3e"),
 name: 'Romantic',
 type: 2
}]

И последнее - отношения

[{
 _id: ObjectId("5b879818763ecd6f1c54d306"),
 postID: ObjectId("507f1f77bcf86cd799439011"),
 categoryID: ObjectId("5b87979c10397d6c12d69513")
},
{
 _id: ObjectId("5b8798eb040890fb2a88c0af"),
 postID: ObjectId("507f1f77bcf86cd799439011"),
 categoryID: ObjectId("5b8797b24e31ebf7603f3c3e"),
}]

Когда я использую поиск $ в Mongo, я получаю что-то вроде этого:

{
 _id: ObjectId("507f1f77bcf86cd799439011"),
 name: 'Foo', 
 categories: [{
     _id: ObjectId("5b879818763ecd6f1c54d306"),
     postID: ObjectId("507f1f77bcf86cd799439011"),
     categoryID: ObjectId("5b87979c10397d6c12d69513")
  },
  {
     _id: ObjectId("5b8798eb040890fb2a88c0af"),
     postID: ObjectId("507f1f77bcf86cd799439011"),
     categoryID: ObjectId("5b8797b24e31ebf7603f3c3e"),
  }]
}

В данном случае это все мои примеры данных в отношениях, в любом случае, как получить только данные категорий, а не данные отношений, я хочу получить что-то вроде этого:

{
 _id: ObjectId("507f1f77bcf86cd799439011"),
 name: 'Foo', 
 categories: [{
     _id: ObjectId("5b87979c10397d6c12d69513"),
     name: 'Funny',
     type: 1
   },
   {
     _id: ObjectId("5b8797b24e31ebf7603f3c3e"),
     name: 'Romantic',
     type: 2
   }]
}

Есть ли отношение один к одному между всеми тремя коллекциями? а какая у вас версия mongodb?

Ashh 30.08.2018 10:19

Да, как и в Wordpress и его таксономии, моя версия mongo выше 3.6, извините, я не могу ввести именно версию, потому что у меня сейчас нет своего компьютера

plumthedev 30.08.2018 10:24

Нет проблем, это легко сделать с помощью mongodb 3.6.

Ashh 30.08.2018 10:28

как это сделать?

plumthedev 30.08.2018 10:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать ниже агрегирование из mongodb 3,6

db.collection.aggregate([
  { "$match": { "_id": ObjectId("507f1f77bcf86cd799439011") } },
  { "$lookup": {
    "from": "Relationship",
    "let": { "categoryID": "$_id" },
    "pipeline": [
       { "$match": { "$expr": { "$eq": [ "$categoryID", "$$categoryID" ] } } },
       { "$lookup": {
         "from": "Category",
         "let": { "categoryID": "$categoryID" },
         "pipeline": [
           { "$match": { "$expr": { "$eq": [ "$_id", "$$categoryID" ] } } }
         ],
         "as": "category"
      }},
      { "$unwind": "$category" },
      { "$replaceRoot": { "newRoot": "$category" }}
    ],
    "as": "categories"
  }}
])

шапо бас товарищ :)

plumthedev 30.08.2018 10:36

Другие вопросы по теме