как получить заказ продавца из нескольких данных сбора - PullRequest
0 голосов
/ 03 июля 2019

У меня есть 4 коллекции для данных заказа магазина.

1. order => field => _id, order_no, cust_id, order_date
2. order_address => field => _id, order_id, cust_name, mobile, address
3. order_details => field => _id, order_id, product_id, seller_id, qty, price
4. order_payment => field => _id, payment_type, payment_status

в этой коллекции order_details есть n номеров записей для ряда товаров в одном заказе.

в том, как получитьконкретный заказ продавца из моих данных с использованием агрегата в node.js из базы данных MongoDB

я пробую этот код, но он покажет ordre_details = [], но покажет порядок в моем результате:

var query = [
        { "$lookup": {
            from: 'order_details',
            let: { order_id: "$_id" },
            pipeline: [
                { $match: { $expr: { $and: [{ $eq: [ "$order_id",  "$$order_id" ] }, { $eq: [ "$seller_id", ObjectID(seller_id) ] }] } } },
                { $project: {
                    amount: 1,
                    cod_charge: 1,
                    shipping_charge: 1,
                    pid: 1,
                    product_attribute_id: 1,
                    qty: 1
                } },
                { "$lookup": {
                    from: 'product',
                    let: { product_id: "$pid", product_attribute_id: '$product_attribute_id'},
                    pipeline: [
                        { $match: { $expr: { $eq: [ "$_id",  "$$product_id" ] } } },
                        { $project: { _id: 1, name: 1, sku: 1 } },
                        { "$lookup": {
                            from: 'product_image',
                            let: { product_attribute_id: '$$product_attribute_id' },
                            pipeline: [
                              { $match: { $expr: { $eq: [ "$product_attribute_id",  "$$product_attribute_id" ] } } },
                              { $project: { _id: 0, image: 1, is_default: 1 } },
                              { $sort : { is_default: -1 } },
                              { $replaceRoot: { newRoot: {_id: "$_id", image: "$image" } } }
                            ],
                            as: 'product_image'
                        } },
                        { $replaceRoot: { newRoot: {
                            _id: "$_id",
                            name: "$name",
                            sku: "$sku",
                            image: { $arrayElemAt: [ "$product_image.image", 0 ] }
                        } } }
                    ],
                    as: 'product'
                } },
                { "$replaceRoot": { newRoot: {
                    _id: '$$ROOT._id',
                    pid: '$$ROOT.pid',
                    amount: '$$ROOT.amount',
                    cod_charge: '$$ROOT.cod_charge',
                    shipping_charge: '$$ROOT.shipping_charge',
                    product_attribute_id: "$$ROOT.product_attribute_id",
                    qty: "$$ROOT.qty",
                    product: { $arrayElemAt: [ "$product", 0 ] },
                } } },
            ],
            as: 'order_details'
        } },
        { "$replaceRoot": {
            newRoot: {
                _id: "$_id",
                order_no: "$order_no",
                cust_id: "$cust_id",
                order_date: "$order_date",
                order_details: "$order_details"
            }
        } }
    ]

orderModel.order.aggregate(query, function(err, orderData){})
...