【问题标题】:fetching document from mongodb-nodejs driver using dates使用日期从 mongodb-nodejs 驱动程序获取文档
【发布时间】: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

【问题讨论】:

    标签: node.js mongodb postman


    【解决方案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 回答

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2020-08-14
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多