У меня есть эти образцы данных
Сообщения
[{
_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
}]
}
Да, как и в Wordpress и его таксономии, моя версия mongo выше 3.6, извините, я не могу ввести именно версию, потому что у меня сейчас нет своего компьютера
Нет проблем, это легко сделать с помощью mongodb 3.6.
как это сделать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете попробовать ниже агрегирование из 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"
}}
])
шапо бас товарищ :)
Есть ли отношение один к одному между всеми тремя коллекциями? а какая у вас версия mongodb?