使用日期从 mongodb-nodejs 驱动程序获取文档

Posted

技术标签:

【中文标题】使用日期从 mongodb-nodejs 驱动程序获取文档【英文标题】:fetching document from mongodb-nodejs driver using dates 【发布时间】:2020-05-08 12:52:50 【问题描述】:

您好,我正在尝试从 mongodb 获取专门针对 D-7 天的文档 示例:如果今天是“星期三”,那么我想获取上次“星期三" 仅

我从前端获取日期, MongoDB中的日期格式:2020-01-15T09:02:48.375+00:00 来自邮递员的日期格式:“2020-01-15”,我在 nodejs 中将其转换为 dateObject 。在安慰 dateObject 日期后看起来像这样:2020-01-15T00:00:00.000Z

nodejs 查询

const  previousDay,vendorId  = req.body;
      console.log(previousDay);
      let date = new Date(previousDay);
      console.log(date);
     const vendorOrder = await Order.find(
          orderCreatedBy: vendorId,orderCreatedOn: date);
     return res.status(200).json(
         vendorOrder
        );
       catch (error) 
        res.send(error);
      
    ;

POSTMAN Req.body

 "previousDay":"2020-01-15"

邮递员回复 它返回空数组

[]

MongoDB合集

_id:5e26be38c13b7149d0a95111
isApproved:false
vendorOrder:[]
frequency:"WE"
orderCreatedBy:5e25550a3405363bc4bf86c1
submittedTo:5e2555363405363bc4bf86c2
dealerOrder:[]
orderCreatedOn:2020-01-15T09:02:48.375+00:00
__v:0

【问题讨论】:

【参考方案1】:

现在匹配日期出现问题,因为 mongodb 将匹配包括时间戳在内的完整日期,因此在保存文档时设置常量时间戳和 date 。 让我们用这个例子来理解.. 保存文档时,将orderCreatedOn的值设置为如下sn-p, 已编辑

exports.createOrder = async (req, res, next) =>  
    req.body['orderCreatedOn'] = new Date().toISOString().split("T")[0] + "T18:30:00.000Z";
    const order = new Order( ...req.body, ); 
    try  
        await order.save(); 
        res.status(201).json( message: "Order created successfully!", order: order, orderId: order._id ); 
     
    catch (e)  
        res.send(e); 
     
;

因此,您在数据库中的日期将被存储为 2020-01-15T18:30:00.000Z 因此,现在当您找到 7 days 之前的日期时,请在您的查找控制器中添加以下 sn-p 。

    var someDate = new Date();
    var numberOfDaysToSubtract = -7; //this refers to date of seven days before
    someDate.setDate(someDate.getDate() + numberOfDaysToSubtract);
    console.log("Date of seven days before ===>" , someDate);
    var date = someDate.toISOString().split("T")[0] + "T18:30:00.000Z";
    date = new Date(date);
    //And the rest code is same. 
    console.log(" =======+++> ", new Date(date));

希望您得到解决方案。

【讨论】:

感谢您的代码清除了很多东西,除了一个 req.body['orderCreatedOn'] 但 orderCreatedOn 正在从我的架构中生成日期,我将如何从 req.body 中获取该日期 将 req.body['orderCreatedOn'] 替换为 req.body['previousDay'],因为您在 req.body 中发送 previousDay。 @sachin orderCreatedOn: type: Date, default: Date.now , 好吧,对不起,我误解了你。 @sachin。您在保存文档时询问 req.body['orderCreatedOn'] 。这将在 req.body 中创建一个键。您不必担心这一点。 @sachin【参考方案2】:

MongoDB 架构:

orderCreatedOn: 
      type: Date,
      default: new Date().toISOString().split("T")[0] + "T18:30:00.000Z"
    ,

Nodejs 控制器:参考@Pushprajsinh Chudasama 回答

【讨论】:

以上是关于使用日期从 mongodb-nodejs 驱动程序获取文档的主要内容,如果未能解决你的问题,请参考以下文章

如何从树资源中隐藏日期试验计划程序中的白盒图标?

日期格式化程序不从应用程序中的字符串返回日期虽然在操场上工作

将日期从 Angular 传递到 Web API 2 的正确方法

FSCalendar - 从选定的日期创建 segue 到另一个视图控制器

从键盘输入两个日期算出这两个日期相差多少天。求java程序代码!

DateTimePicker 从数据库中预订日期和时间