首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP和MongoDate查询

PHP和MongoDate查询
EN

Stack Overflow用户
提问于 2012-04-27 04:49:30
回答 1查看 3.5K关注 0票数 1

使用PHP脚本创建了一个mongo集合,其中包含一个用MongoDate初始化的子字段。集合中的结果字段如下所示:

代码语言:javascript
复制
"ts_add" : {
    "sec" : 1335468966,
    "usec" : 420000
},

当我在PHP中构建针对这个字段的查询时,我是这样构建的:

代码语言:javascript
复制
$val = new MongoDate(strtotime($strDate)); //  $strDate = '2012-04-25'
...
$aryQuery = array(STRING_COL_NAME => array ('$gte' => $val));

然后,我做了一些其他的事情,并使用find()命令执行查询。

根据调试器,PHP中的构建查询结构如下所示:

代码语言:javascript
复制
find(Array
(
    [ts_add] => Array
        (
            [$gte] => MongoDate Object
                (
                    [sec] => 1335337200
                    [usec] => 0
                )

        )
)

在我的日志文件中,我看到了以下内容:

代码语言:javascript
复制
runQuery called coll.table { ts_add: { $gte: new Date(1335337200000) } }

但没有数据是returned....and的,我对所有额外的零感到有点奇怪,但我认为这是默认的时间戳数据添加或某种奇怪的MongoDate-ism……

如果我手动从cli运行以下命令:

代码语言:javascript
复制
> db.table.find({ "ts_add.sec": { $gte:1335337200 } })

返回完整的数据集(如预期的那样)。

然后,尝试从cli中模仿MongoDate的事情:

代码语言:javascript
复制
> var start = new Date(2012, 3, 10)
> db.addons_add.find({ ts_add : { $gte : start } } )

未返回任何数据。

如果我使用相同的输入数据并将其转换为MongoID,对$_id字段进行搜索,则搜索成功。

有什么建议吗?我遗漏了什么?感觉我站在离树三英寸的地方抱怨我怎么看不到森林……

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-27 05:29:45

mongod以JavaScript格式打印所有日期,该格式以毫秒为单位打印日期(这是所有额外的0的来源)。因此,对1335337200的查询正确地变成了1335337200 * 1000 = 1335337200000。

不过,您粘贴的初始文档片段看起来是错误的。"ts_add" : {"sec" : 1335468966, "usec" : 420000}是JSON,但是JavaScript中的Date类型不应该是这样的。你是如何保存日期的?看起来它们正在被转换为另一种类型的对象,然后存储为“泛型对象”而不是“日期类型”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10341234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档