猫鼬查询中的嵌套选择

问题描述

我正在尝试将SQL转换为Mongoose查询,但发现它很混乱。这是我的架构。基本上,我想从今天开始获取过去7天的数据

var mongoose = require('mongoose');  
var RequestSchema = new mongoose.Schema({  
  pickup_person_name:String,dest_person_name:String,pickup_person_phone:String,dest_person_phone:String,tranx_status:String,order_status:String,pickup_longitude:String,pickup_latitude:String,pickup_location_name:String,pickup_date:Date,dest_longitude:String,dest_latitude:String,dest_location_name:String,price:String,item_to_deliver:String,rider_id:String,rider_name:String,order_number:String,payment_mode:String
},{ autoCreate: true});
mongoose.model('Request',RequestSchema);

这是我要转换为猫鼬的查询。

SELECT pickup_date,count(*) FROM (SELECT pickup_date as event_date FROM requests where DATE(pickup_date) >= (CURRENT_DATE -  '7 DAYS')   ) GROUP BY pickup_date ORDER BY pickup_date

I expect to have a list like 
[ { event_date:27/08/2020,count:8},{ event_date:26/08/2020,count:9},{ event_date:25/08/2020,count:9}]

解决方法

您要使用类似这样的内容:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $gte: [
          "$pickup_date",{
            "$subtract": [
              "$$NOW",604800000
            ]
          }
        ]
      }
    }
  },{
    $group: {
      _id: {
        year: {
          $year: "$pickup_date"
        },month: {
          $month: "$pickup_date"
        },day: {
          "$dayOfMonth": "$pickup_date"
        }
      },count: {
        $sum: 1
      }
    }
  },{
    $project: {
      count: 1,_id: 0,event_date: {
        "$concat": [
          {
            "$toString": "$_id.day"
          },"/",{
            "$toString": "$_id.month"
          },{
            "$toString": "$_id.year"
          }
        ]
      }
    }
  }
])

MongoPlayground

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...