【问题标题】:merge two objects of different collections and get specific data in Mongodb合并不同集合的两个对象并在MongoDB中获取特定数据
【发布时间】:2020-07-05 14:47:34
【问题描述】:

我有两个系列,产品和订单。

products 集合看起来像这样。

[
    {
        "_id": "5efb56741c32133bf43ea9aa",
        "title": "Xyz",
        "image": "172e4eb73415b3cc8540e651.jpg",
        "quantity": "1 Ltr",
        "price": 1500,
        "status": true,
        "creationDate": "2020-06-30T15:12:52.570Z",
        "__v": 0
    },
    {
        "_id": "5f0079bd27a734424cb3069a",
        "title": "abc",
        "image": "122e4eb73413b3cc854n42n1.jpg",
        "quantity": "500 ml",
        "price": 700,
        "status": true,
        "creationDate": "2020-06-30T15:12:52.570Z",
        "__v": 0
    }
]

orders 集合看起来像这样。

[
    {
        "_id": "5efca937def27b74fc9f6aa6",
        "products": [
            {
                "Date": "2020-07-01T15:14:36.630Z",
                "_id": "5efca937def27b74fc9f6aa8",
                "productId": "5efb56741c32133bf43ea9aa",
                "productQuantity": 2
            },
            {
                "Date": "2020-07-01T15:14:36.630Z",
                "_id": "5efca937def27b74fc9f6aa7",
                "productId": "5f0079bd27a734424cb3069a",
                "productQuantity": 1
            }
        ],
        "totalQuantity": 3,
        "totalPrice": 3700,
        "creationDate": "2020-07-01T15:18:15.756Z",
        "__v": 0
    },
    {
        "_id": "5efca897def27b74fc9f6aa2",
        "products": [
            {
                "Date": "2020-07-01T15:14:36.630Z",
                "_id": "5efca897def27b74fc9f6aa3",
                "productId": "5f0079bd27a734424cb3069a",
                "productQuantity": 1
            }
        ],
        "totalQuantity": 1,
        "totalPrice": 700,
        "creationDate": "2020-07-01T15:15:35.422Z",
        "__v": 0
    }
]

使用这两个集合我怎样才能得到这样的结果:

[
    {
        "_id": "5efca937def27b74fc9f6aa6",
        "products": [
            {
                "Date": "2020-07-01T15:14:36.630Z",
                "_id": "5efca937def27b74fc9f6aa8",
                "productId": "5efb56741c32133bf43ea9aa",
                "productQuantity": 2,
                "title": "Xyz",
                "image": "172e4eb73415b3cc8540e651.jpg",
                "quantity": "1 Ltr",
                "price": 1500
            },
            {
                "Date": "2020-07-01T15:14:36.630Z",
                "_id": "5efca937def27b74fc9f6aa7",
                "productId": "5f0079bd27a734424cb3069a",
                "productQuantity": 1,
                "title": "abc",
                "image": "122e4eb73413b3cc854n42n1.jpg",
                "quantity": "500 ml",
                "price": 700
            }
        ],
        "totalQuantity": 3,
        "totalPrice": 3700,
        "creationDate": "2020-07-01T15:18:15.756Z",
        "__v": 0
    },
    {
        "_id": "5efca897def27b74fc9f6aa2",
        "products": [
            {
                "Date": "2020-07-01T15:14:36.630Z",
                "_id": "5efca897def27b74fc9f6aa3",
                "productId": "5f0079bd27a734424cb3069a",
                "productQuantity": 1,
                "title": "abc",
                "image": "122e4eb73413b3cc854n42n1.jpg",
                "quantity": "500 ml",
                "price": 700
            }
        ],
        "totalQuantity": 1,
        "totalPrice": 700,
        "creationDate": "2020-07-01T15:15:35.422Z",
        "__v": 0
    }
]

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    我使用这个查询得到了结果。

    order.aggregate([
        { "$unwind": "$products" },
        {
            $lookup: {
                from: 'products',
                localField: "products.productId",
                foreignField: "_id",
                as: "product"
            }
        },
        {
            "$addFields": {
                "products": { $mergeObjects: [{ $arrayElemAt: ["$product", 0] }, "$$ROOT.products"] }
            }
        },
        {
            "$group": {
                "_id": "$_id",
                "products": { "$push": "$products" },
                "totalQuantity": { $first: '$totalQuantity' },
                "totalPrice": { $first: '$totalPrice' },
                "creationDate": { $first: '$creationDate' }
            }
        }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 2019-01-13
      • 2020-12-12
      相关资源
      最近更新 更多