【问题标题】:How to create a query on a Date field in MongoDB using mongoose?如何使用 mongoose 在 MongoDB 中的 Date 字段上创建查询?
【发布时间】:2014-10-30 15:33:56
【问题描述】:

我正在尝试查询 Mongo 数据库中的集合,以获取日期范围内带有 Time 字段的所有记录。 Time 被定义为数据库中的日期。
我的环境:Node.js、Express、Jade、javascript。

这是javascript代码:

var query = {};
var timeQuery = {};
timeQuery["$lt"] = new Date().toISOString();
query["Time"] = timeQuery;
console.log(query);
db.model('testruns').find(query).exec(function (err, testruns) {
    console.log(testruns.length);
    // doing something
});

将结果打印到控制台:

{ 时间:{ '$lt': '2014-10-30T15:04:39.256Z' } }
0

查询返回0个结果(应该还有更多)

顺便说一句...从 RoboMongo 运行日期查询会返回结果,只是错误的结果。例如:

db.testruns.find({Time : {"$gte" : new Date("2014-10-30T15:13:37.199Z")}})

返回所有记录。

我尝试了什么: This onethat oneanother one,当然还有猫鼬文档,还有更多来自 google 的结果。

他们中的大多数都给出了相同的答案,但没有一个对我有用。帮助!

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    据我所知,您没有在查询中包含要引用的字段,您可以试试这个: 我假设您的字段名称是“时间”

    var date = new Date(); //or the date you want to compare
    db.model('testruns').find({"Time":{"$lt":date}}).exec(function (err, testruns) {
        console.log(testruns.length);
        // doing something
    });
    

    【讨论】:

    • 我是,是timeQuery参数。我在查询中添加了一个日志来显示它。以防万一,我尝试了您编写的确切代码,但没有成功。
    • 知道了,你想得到刚好低于的日期吗?比较的日期对吗?你可以尝试使用我建议的符号吗?
    • 我想获取日期范围。但在此之前我需要进行任何时间查询(我尝试了许多 gt/gte/lt/lte 查询)
    • 你能发布你的架构吗?
    【解决方案2】:

    问题与架构定义有关,与此代码无关。查询的代码是正确的。架构定义将此字段(时间)作为字符串,这导致 MongoDB 尝试在日期字段中查找字符串...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-18
      • 2015-07-22
      • 2012-09-16
      • 2015-01-16
      • 2021-10-06
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多