#mongodb
Вопрос:
Я пытаюсь объединить две таблицы и получить некоторые дополнительные данные на основе массива идентификаторов из одной таблицы в другую с помощью mongodb. Одна коллекция связана с «Пользователем», а другая-с «Заказом». Коллекция пользователей содержит массив идентификаторов, связанных с заказом, а таблица заказов содержит имя заказа и другие данные. Мне нужно перечислить всех пользователей со всеми именами заказов и данными с подробными сведениями о пользователе.
Напр.:
User Collection:
User = [{
_id: ObjectId,
userId: 1,
userName: "User1",
OrderIds: [{oId: 1},{oId:3}]
},
{
_id: ObjectId,
userId: 2,
userName: "User2",
OrderIds: [{oId: 2},{oId:3}]
}]
--------------------------------------------
Order Collection:
Order = [{
_id: ObjectId,
orderId: 1
orderName: "Pen"
},
{
_id: ObjectId,
orderId: 2
orderName: "Book"
},
{
_id: ObjectId,
orderId: 3
orderName: "Chair"
}]
---------------------------------------------------
Desired Output:
-----------------------------------------------------
Output = [{
_id: ObjectId,
userId: 1,
userName: "User1",
OrderIds: [{oId: 1,oName: "Pen"},{oId:3,oName: "Chair"}]
},
{
_id: ObjectId,
userId: 2,
userName: "User2",
OrderIds: [{oId: 2,oName: "Book"},{oId:3,oName: "Chair"}]
}]
Пожалуйста, у кого-нибудь есть идея, как это сделать?
Ответ №1:
Используйте $lookup
db.users.aggregate([
{
"$lookup": {
"from": "orders",
"localField": "OrderIds.oId",
"foreignField": "orderId",
"as": "OrderIds"
}
}
])
Комментарии:
1. Это работает.. Спасибо 🙂