【问题标题】:How to use mongodb lookup with group and calculate total如何在组中使用 mongodb 查找并计算总数
【发布时间】:2017-11-09 03:21:26
【问题描述】:

我有两个收藏

1.产品集合==>

/* 1 */
{
    "_id" : 154,
    "name" : "Chocolate Heaven",
    "price" : 7
}

/* 2 */
{
    "_id" : 155,
    "name" : "Tasty Lemons",
    "price" : 8
}

/* 3 */
{
    "_id" : 156,
    "name" : "Vanilla Dreams",
    "price" : 9
}

2.订单集合==>

/* 1 */
{
    "_id" : 1,
    "product_id" : 154,
    "quantity" : 10
}

/* 2 */
{
    "_id" : 2,
    "product_id" : 155,
    "quantity" : 3
}

/* 3 */
{
    "_id" : 3,
    "product_id" : 156,
    "quantity" : 6
}

/* 4 */
{
    "_id" : 4,
    "product_id" : 154,
    "quantity" : 1
}

我期待一个产品的输出,使用 mongodb 的总价格是多少

156 香草梦 9 6 54

db.getCollection('order').aggregate([
        {$group : {_id :{ product_id : "$product_id"}, sellCount : { $sum : "$quantity"}}},
        {$lookup : { from : 'product',localField : '_id.product_id' , foreignField :'_id',as: 'prodDetails' }},
        {$match: {prodDetails: {$ne: []}}}
]);
  1. 你能帮我找出正确的查询吗?
  2. 如何为此输出创建视图

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    您可以尝试运行只使用两个步骤 $lookup$addFields 的管道,如下所示:

    db.product.aggregate([
        {
            "$lookup": {
                "from": "order",
                "localField": "_id",
                "foreignField": "product_id",
                "as": "orders"
            }
        },
        {
            "$addFields": {
                "total": {
                    "$multiply": [
                        "$price",
                        { "$sum": "$orders.quantity" }
                    ]
                }
            }
        }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2022-11-15
      • 2021-11-24
      相关资源
      最近更新 更多