首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$project in $lookup mongodb

$project in $lookup mongodb
EN

Stack Overflow用户
提问于 2018-12-10 16:55:26
回答 2查看 41K关注 0票数 28

我有一个查询,它使用$lookup“连接”两个模型,之后我使用$project来选择我需要的字段,但是我的$project带来了一个包含更多数据的对象数组(user_detail)。我只想要结果的两个字段(scheduleStartscheduleEnd)。

My查询:

代码语言:javascript
运行
复制
 User.aggregate([{
      $match: {
        storeKey: req.body.store,      
      }
    },
    {
      $group: {
        _id: {
          id: "$_id",
          name: "$name",
          cpf: "$cpf",      
          phone: "$phone",
          email: "$email",
          birthday: "$birthday",
          lastName: "$lastname"      
        },
        totalServices: {
          $sum: "$services"
        },    
      }
    },
    {
      $lookup: {
        from: "schedules",
        localField: "_id.phone",
        foreignField: "customer.phone",
        as: "user_detail"
      }  
    },  
    {
      $project: {
        _id: 1,
        name: 1,
        name: 1,
        cpf: 1,      
        phone: 1,
        email: 1,
        birthday: 1,
        totalServices: 1,
        totalValue: { $sum : "$user_detail.value" },
        count: {
          $sum: 1
        },
        user_detail: 1
      }
    },

查询结果:

代码语言:javascript
运行
复制
count: 1
totalServices: 0
totalValue: 73
user_detail: Array(2)
0:
...
paymentMethod: 0
paymentValue: "0"
scheduleDate: "2018-10-02"
scheduleEnd: "2018-10-02 08:40"
scheduleStart: "2018-10-02 08:20"
status: 3
store: "5b16cceb56a44e2f6cd0324b"
updated: "2018-11-27T13:30:21.116Z"
1:
...
paymentMethod: 0
paymentValue: "0"
scheduleDate: "2018-11-27"
scheduleEnd: "2018-11-27 00:13"
scheduleStart: "2018-11-27 00:03"
status: 2
store: "5b16cceb56a44e2f6cd0324b"
updated: "2018-11-27T19:33:39.498Z"
_id:
birthday: "1992-03-06"
email: "csantosgrossi@gmail.com"
id: "5bfed8bd70de7a383855f09e"
name: "Chris Santos G"
phone: "11969109995"
...

我需要的结果:

代码语言:javascript
运行
复制
count: 1
totalServices: 0
totalValue: 73
user_detail: Array(2)
0:
scheduleEnd: "2018-10-02 08:40"
scheduleStart: "2018-10-02 08:20"
1:
scheduleEnd: "2018-11-27 00:13"
scheduleStart: "2018-11-27 00:03"

_id:
birthday: "1992-03-06"
email: "csantosgrossi@gmail.com"
id: "5bfed8bd70de7a383855f09e"
name: "Chris Santos G"
phone: "11969109995"
...

我怎样才能用我的查询做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-10 17:07:13

可以使用$lookup 3.6语法对$lookup管道中的字段进行$project

代码语言:javascript
运行
复制
User.aggregate([
  { "$lookup": {
    "from": "schedules",
    "let": { "id": "$_id.phone" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$customer.phone", "$$id"] }}},
      { "$project": { "scheduleStart": 1, "scheduleEnd": 1 }}
    ],
    "as": "user_detail"
  }}
])
票数 52
EN

Stack Overflow用户

发布于 2020-03-19 04:47:04

对于mongo版本> 3.6,此查询应该适用于您:

代码语言:javascript
运行
复制
 User.aggregate([{
      $match: {
        storeKey: req.body.store,      
      }
    },
    {
      $group: {
        _id: {
          id: "$_id",
          name: "$name",
          cpf: "$cpf",      
          phone: "$phone",
          email: "$email",
          birthday: "$birthday",
          lastName: "$lastname"      
        },
        totalServices: {
          $sum: "$services"
        },    
      }
    },
    {
      $lookup: {
        from: "schedules",
        localField: "_id.phone",
        foreignField: "customer.phone",
        as: "user_detail"
      }  
    },  
    {
      $project: {
        _id: 1,
        name: 1,
        name: 1,
        cpf: 1,      
        phone: 1,
        email: 1,
        birthday: 1,
        totalServices: 1,
        totalValue: { $sum : "$user_detail.value" },
        count: {
          $sum: 1
        },
        user_detail: {
            scheduleEnd: 1,
            scheduleStart: 1,
        }
      }
    },
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53710203

复制
相关文章

相似问题

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