#mon&odb #mon&oose #mon&odb-query #mon&oose-schema
#mon&odb #mon&oose #mon&odb-запрос #mon&oose-schema
Вопрос:
Я выполняю поиск $ из _id в схеме Order, и он работает, как ожидалось. Но в $project
как добавить оставшиеся ключи. Я добавил свой код ниже.
Коллекция продуктов:
{
"_id": "54759eb3c090d83494e2d804",
"product_name": "sample product",
"ima&e": "default.pn&",
"price": 55,
"discount": 5,
}
Сбор списка заказов
{
"user_name": "sample1",
"product_list":[
{
"product_id": "54759eb3c090d83494e2d804"
"quantity": 5
}
]
}
запросы
[
{
from: 'product',
localField: 'product_list.product_id',
forei&nField: '_id',
as: 'product_list.product_id',
model: 'ProductModel',
},
],
$Project
{
user_name: true,
product_list: {
$map: {
input: '$product_list.product_id',
as: 'product',
in: {
product_name: '$$product.product_name',
},
},
},
}
Текущий результат:
{
"user_name": "sample1",
"product_list":[
"product_id":{
"product_name": "sample product"
}
]
}
В этом текущем результате поле количества отсутствует. Как добавить $project
?. Ожидаемый результат показан ниже
Ожидаемый результат:
{
"user_name": "sample1",
"product_list":[
{
"product_id": {
"product_name": "sample product"
}
"quantity": 5
}
]
}
Комментарии:
1. каким будет результат после поиска?
2. Вывод был похож на текущий результат
3. опубликуйте некоторый образец коллекции продуктов
4. @varman, я обновил коллекцию продуктов выше
5. Я проверяю это, до тех пор пока не удалил свой ответ
Ответ №1:
Вам нужно сделать это $unwind
раньше $lookup
, потому что это не будет работать непосредственно в полях массива, и здесь вам не нужна $map внутри $ project,
- $unwind
product_list
деконструирует массив
db.order.a&&re&ate([
{ $unwind: "$product_list" },
- $lookup с конвейером, это позволит использовать конвейер внутри поиска, здесь
$project
для обязательных полей
{
$lookup: {
from: "product",
as: "product_list.product_id",
let: { product_id: "$product_list.product_id" },
pipeline: [
{
$match: {
$expr: { $eq: ["$$product_id", "$_id"] }
}
},
{
$project: {
_id: 0,
product_name: 1
}
}
]
}
},
$unwind
с pathproduct_list.product_id
потому что он нужен вам как объект
{ $unwind: { path: "$product_list.product_id" } },
- $&roup путем
_id
переконструирования вашегоproduct_list
массива
{
$&roup: {
_id: "$_id",
user_name: { $first: "$user_name" },
product_list: { $push: "$product_list" }
}
}
])
Комментарии:
1. Вы поняли меня за минуту до этого 🙂
2. Opps извините, ребята, просто сделал это и публикую.
3. Никаких проблем @turivishal 🙂 Продолжайте качать все
4. @turivishal хаха, это было потрясающе
5. Нет, братан, то, что ты делаешь, совершенно нормально…. Вам не нужно никого ждать. Очевидно, я тоже учусь на ответах: D