#mongodb #mongodb-query #aggregate
Вопрос:
У меня есть экземпляр MongoDB с 3 таблицами, построенными следующим образом:
- Компания {_id, [productIds], фу, бар, …}
- Продукт {_id, productCategoryId, foo, бар, …}
- Категория продукта {_id, foo, бар, …}
Мне нужен результат, который возвращает все данные компании с дополнительным полем. Это должно содержать все данные о продукте (так что в основном это объединение в productIds). Каждый продукт должен быть объединен со своей категорией.
Я получил следующий запрос по этому поводу:
db.companyentities.aggregate([ { $unwind: "$productIds" }, { $lookup: { as: "products", foreignField: "_id", from: "productentities", localField: "productIds" } }, { $unwind: "$products" }, { $lookup: { as: "products.productCategory", foreignField: "_id", from: "productcategoryentities", localField: "products.productCategoryId" } }, { $unwind: "$products.productCategory" }, { $group: { _id: "$_id", products: { $push: "$products" }, detail: { $first: "$ROOT" } } }, { $replaceRoot: { newRoot: { $mergeObjects: [ {products: "$products"}, {detail: "$detail"} ], } } } ])
Я правильно понял соединения, проблема в том, что результат имеет формат {идентификатор компании, сведения: {Данные компании}, продукты { Данные продукта }}.
Мне нужны данные о компании, как в базе данных, но с дополнительным столбцом, содержащим данные о продукте.
Как мне этого добиться? Я думаю, что я делаю что-то не так со $replaceRoot
своей стороны.
Заранее спасибо за любые предложения 🙂
Комментарии:
1. Вместо
{detail: "$detail"}
этого попробуйте просто"$detail"
Ответ №1:
Ответ @Joe был правильным, спасибо 🙂
Вместо {detail: «$detail»} попробуйте просто «$detail»
Комментарии:
1. На самом деле это не ответ — пожалуйста, поднимите голос и примите вместо этого ответ @Joe.
2. @JohnFF Мне жаль, что я пытался, но так как он ответил как комментарий, а не как ответ, я не знаю, как это сделать :гримасничать: