如何在mongo db

时间:2017-12-26 09:21:58

标签: node.js mongodb

{ 
  "_id" : ObjectId("5a4212b49e710765c486d7c6"), 
  "student_id" : ObjectId("5a3df85bcc6425291c54d2ad"), 
  "attendance_status" : true, 
  "create_at" : 1514279592137.0, 
  "__v" : NumberInt(0)
}

{ 
  "_id" : ObjectId("5a4212b49e710765c486d7c7"), 
  "student_id" : ObjectId("5a3df85bcc6425291c54d2ae"), 
  "attendance_status" : true, 
  "create_at" : 1514279592137.0, 
  "__v" : NumberInt(0)
}

{ 
  "_id" : ObjectId("5a4212b49e710765c486d7c9"), 
  "student_id" : ObjectId("5a3df85bcc6425291c54d2b0"), 
  "attendance_status" : true, 
  "create_at" : 1514279592137.0, 
  "__v" : NumberInt(0)
}

我将创建时间存储为tramp。我想获得一个基于创建月份的数据来实现它吗?

我正在尝试使用以下查询查找数据。

  Attendance.aggregate(
  [{
      $project: {
        create_at: "$create_at",
        student_id: "$student_id",
        attendance_status: "$attendance_status",
        month: {
          $month: "$create_at"
        }
      }
    },
    {
      $match: {
        "month": req.body.month
      }
    },
 ])

我想基于创建月份的输出。如果我发送 req.body.month = 3 。我只想在3个月内获得数据。

2 个答案:

答案 0 :(得分:4)

对于您要查询数据的任何月份,您可以使用new Date('YYYY-MM-DD').getTime()获取开始时间戳和结束时间戳(e),并将数据库查询为

< / p>

Attendance.find(
    {
     create_at: {
         $gte: s, //$gte corresponds to >=
         $lte: e  //$lte corresponds to <=
        }
    }
)

您可以找到有关此类mongo运算符的更多详细信息here


答案 1 :(得分:0)

这样做,我认为你应该看到MomentJS库。

例如:

var moment = require('moment');
var month = 3; // March

// Find all documents between 2017/03/01 and 2017/03/31
Attendance.find({
    create_at: {
        $gte: moment(`2017/${month}`, 'YYYY/MM').startOf('month').format('x'),
        $lte: moment(`2017/${month}`, 'YYYY/MM').endOf('month').format('x')
    }
});

希望它有所帮助。