我对我的问题有疑问.我的集合中有子字段为start_date的对象.我需要在那一天严格搜查.作为构造查询的一部分,我使用$and运算符,因此最终查询如下所示:

// I've tried this
 wb_collection_tracking_for_testing.countDocuments({ '$and': [ { 'CurrentState.start_date': '2021-07-01T00:00:00' } ] }, {})
// and this
wb_collection_tracking_for_testing.countDocuments({ '$and': [ { 'CurrentState.start_date': '2021-07-01' } ] }, {})
// and this
wb_collection_tracking_for_testing.countDocuments({ '$and': [ { 'CurrentState.start_date': new Date( '2021-07-01') } ] }, {})

而在Mongoose 7.0.3中,他们都给了零分.但至少最后一个给出了正确的结果.所以我的问题是,如何在运算符$and的子字段上使用严格的日期搜索?

UPD:集合中对象的示例(我只包含了与该查询字段相关的内容)Start_Date在MongoDB中存储为Date:

{ CurrentState: { start_date: 2022-01-01T00:00:00.000+00:00 }}

START_DATE字段没有出现在架构中(它是用一个严格的FALSE选项创建的).但我try 将该字段添加到类型为Date的模式中,得到了相同的结果.

提前谢谢!

推荐答案

MongoDB stores times in UTC,因此您必须使用Date.UTC()或表示UTC时区的字符串来转换日期:

const myDate = new Date(Date.UTC(2021, 06, 01)); // month index starts from 0
// Or
// const myDate = new Date('2021-07-01T00:00:00Z');

const result = await wb_collection_tracking_for_testing.countDocuments({ '$and': [ { 'CurrentState.start_date': myDate } ] }, {})

Node.js相关问答推荐

使用prisma迁移到SQL失败

在渲染上部署Node.js服务器时出错:MODULE_NOT_FOUND

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

Node js 处理回调和 Promise

在 puppeteer 中从 pdf 中删除 about:blank 和 date-time

Rails 7导入npm yaml包时出现404错误

我误解了外键的工作原理吗?使用续集

如何解决未调用 Express 错误处理程序的问题

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

使用react 组件加载特定 DIV 而无需重新加载整个页面

kubernetes 上的 nextjs 无法启动

Nodejs mongoose 在一个查询中从多个集合中获取结果

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

如何在 Node.js 中逐字节读取二进制文件

Node_redis - 如何删除密钥?

node/express:使用 Forever 连续运行脚本时设置 NODE_ENV

Node.js 应用程序有周期性的缓慢和/或超时(不接受传入的请求)

为什么我们要为 Angular 2.0 安装 Node.js?

要求('babel/register')不起作用

node.js 异步库