当前位置: 首页 > 知识库问答 >
问题:

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

年嘉禧
2023-03-14

您好,我正在尝试从mongodb获取D-7天的文档
示例:如果今天是“星期三”,那么我只想获取上一个“星期三”的文档

我得到的日期从前端,
日期格式在mongob:2020-01-15T09:02:48.375 00:00
日期格式从邮递员:"2020-01-15"我在nodejs转换成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);
      }
    };

邮递员。身体

{ "previousDay":"2020-01-15"}

POSTMAN响应返回空数组

[]

Mongodb系列

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

共有2个答案

孟祯
2023-03-14

MongoDB模式:

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

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

晏兴发
2023-03-14

现在匹配日期存在问题,因为mongodb将匹配包括时间戳在内的完整日期,所以在保存文档时,将恒定时间戳与日期一起设置让我们用这个例子来理解
保存文档时,此时将orderCreatedOn的值设置为下面的snippet,Edited

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天前的日期时,请将下面的代码片段添加到find controller中。

    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));

希望你找到解决办法了。

 类似资料:
  • 问题内容: 我想对MongoDB驱动程序作出承诺。我写了以下代码: 您是否知道为什么在调用该方法时为什么没有输出: 问题答案: 手动散布API是很危险的,我建议采取以下措施: 有了Bluebird的承诺,它看起来就像:

  • 我总是读到MongoDB驱动程序(>2.0)for NodeJS支持承诺。但我找到的仅有的例子是connect()和findOne()函数。虽然它适用于这些,而且我可以得到承诺,但对于aggregate()和find()它不适用。我明白这是因为它们可能会返回游标,但是既然有承诺支持,那些承诺在哪里呢?一定有办法和他们合作。欢迎提供链接、示例或简单解释:) 谢谢你,乔迪。

  • 我必须在mongob上执行查询,我想只选择一个具有特定_id的文档(类型为ObjectId)。 我使用“严格模式”sintax,特别是运算符$oid用于将_id与字符串进行比较。 但是它不起作用!,我现在不知道它是一个错误(一袋mongo-c-drive/mongo-delphi-drive)还是我在ObjectId字段上编写了错误的查询代码。 在一个简单的代码片段下面,存在具有_id的文档,但b

  • 我正在尝试使用MongoDBJava驱动程序作为聚合命令的一部分创建查询。目前我允许日期范围或特定日期数组作为参数。例如 日期范围查询工作正常,我解析xml并将其转换为在mongo中生成以下查询的DBObject; 对于指定日期,我只想返回在给定日期的00:00:00.000和第二天的00:00:00.000之间发生的结果。根据我对mongo查询的基本了解,我希望做一个类似于日期范围的$匹配,但是

  • 问题内容: 我正在尝试使用Selenium Web驱动程序获取文本,这是我的代码。请注意,我不想使用Xpath,因为在我的情况下,每次重新启动网页时id都会更改,请提供帮助。 我的代码: HTML: 问题答案: 你只想。 然后,您可以在得到验证 后对其 进行验证,不要尝试传递您 期望的 内容。

  • UTCDateTime的var_dump显示有效值: 对象(MongoDB\bson\utcdatetime)#477(1){[“毫秒”]=> 字符串(10)“1515954053”} 预期返回的文档示例: UPDATE:删除发送到UTCDateTime对象的变量,如下所示: 作品(如上面所示,我在将来添加了一个记录)。问题是当我发送变量来指定我需要的时间戳时。