【问题标题】:mongoDB Not Returning Query When Trying to Filter By Date尝试按日期过滤时mongoDB不返回查询
【发布时间】:2022-11-07 15:21:02
【问题描述】:

我正在尝试查找大于或等于一个月前创建的所有文档。

但是当我查询数据库时,它在执行以下代码时什么也不返回:

     console.log(moment().add(-31, "days").toDate()) // this logs 2022-09-30T07:27:26.373Z

                let filter = {
                    companyId: companyId,
                    userId: userId,
                    _created_at: {$gte: moment().add(-31, "days").toDate()}
                };

   db.collection("Users")
                    .find(filter)
                    .count()
                    .then(count => {
                        if(!count){
                            return resolve({result: [], count: 0});
                        } else {
                            db.collection("Users")
                                .find(filter)
                                .sort({_created_at: -1})
                                .limit(parseInt(limit))
                                .skip(parseInt(page) * parseInt(limit))
                                .toArray()
                                .then(result => {
                                    resolve({result: result, count: count});
                                })
                                .catch(error => {
                                    console.log(error);
                                    reject(error);
                                })
                        }
                    });

但是,当我执行以下过滤器时,它会起作用并返回文档:

 let filter = {
                    companyId: companyId,
                    userId: userId,
                    _created_at: {$gte: moment().add(-31, "days").format("YYYY-MM-DD[T]HH:mm:ss.SSS[Z]") }
                };

我唯一改变的是日期的格式,我正在指定它应该如何格式化以等于 DB,但我不想做一些硬编码的事情。虽然 moment().add(-31, "days").toDate() 在我的数据库中匹配相同的格式。

为什么我没有从查询中得到任何结果?

【问题讨论】:

  • 这是错误的做法。日期值应该是绝不存储为字符串,这是一个设计缺陷。始终正确存储 Date 对象。然后{$gte: moment().add(-31, "days").toDate()} 将按预期工作。

标签: mongodb momentjs


【解决方案1】:

toDate() 返回一个 JS Date 对象,尝试使用 format() 返回一个 ISO 格式的日期:

let filter = {
  companyId: companyId,
  userId: userId,
  _created_at: { $gte: moment().add(-31, 'days').format() },
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2016-02-11
    • 2013-08-16
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多