首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何按字段的一部分进行分组?

如何按字段的一部分进行分组?
EN

Stack Overflow用户
提问于 2018-07-25 01:06:15
回答 1查看 0关注 0票数 0

我有这两个MongoDB集合:

代码语言:txt
复制
// orders
{
  _id: ObjectId("5a4bf27f9b3e644b242c6383"),
  price: 1000
},
{
  _id: ObjectId("6a4bf27f9b3e644b242c6384"),
  price: 2000
},
{
  _id: ObjectId("3a4bf27f9b3e644b242c6382"),
  price: 3000
}

// routes
{
  _id: ObjectId(""),
  user:ObjectId(""),
  tasks:[
     { order: ObjectId("5a4bf27f9b3e644b242c6383"), type="1" },
     { order: ObjectId("6a4bf27f9b3e644b242c6384"), type="2" },
     { order: ObjectId("3a4bf27f9b3e644b242c6382"), type="3" },
  ]
}

我需要匹配一个用户ID(processes.user),并通过它找到订单价格的总和(sum orders.Price)。

我尝试了几个查询,但没有接近我需要的结果:

代码语言:txt
复制
{
  user: ObjectId(""),
  total: 6000
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-25 10:12:51

你可以使用下面的聚合:

代码语言:txt
复制
db.routes.aggregate([
    {
        $unwind: "$tasks"
    },
    {
        $lookup: {
            from: "orders",
            localField: "tasks.order",
            foreignField: "_id",
            as: "order"
        }
    },
    {
        $unwind: "$order"
    },
    {
        $group: {
            _id: "$_id",
            total: { $sum: "$order.price" }
        }
    }
])

你可以在使用$ lookup与第二个集合“join”之前$unwind你的任务,然后可以再次使用$unwind将数组转换为单个文档。在最后一步中,使用$ group并获得总价。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档