使用帶有使用MongoDate初始化的子字段的PHP腳本創建了一個mongo集合。集合中所產生的場是這樣的:PHP和MongoDate查詢
"ts_add" : {
"sec" : 1335468966,
"usec" : 420000
},
當我建立我的查詢aginst在PHP這個領域,我建立這樣的:
$val = new MongoDate(strtotime($strDate)); // $strDate = '2012-04-25'
...
$aryQuery = array(STRING_COL_NAME => array ('$gte' => $val));
然後我做一些其他的東西並用find()命令執行查詢。
在PHP構建查詢的結構是這樣的,根據調試器:
find(Array
(
[ts_add] => Array
(
[$gte] => MongoDate Object
(
[sec] => 1335337200
[usec] => 0
)
)
)
在我的日誌文件,我看到:
runQuery called coll.table { ts_add: { $gte: new Date(1335337200000) } }
但沒有數據被不斷返回.. ..我有點羨慕所有額外的零,但我認爲這是默認的時間戳數據添加或一些奇怪的MongoDate - ism ...
如果我手動,從cli,運行此命令:
> db.table.find({ "ts_add.sec": { $gte:1335337200 } })
返回完整的數據集(與預期的一樣)。
想這一點,那麼,從CLI,試圖模仿MongoDate件事:
> var start = new Date(2012, 3, 10)
> db.addons_add.find({ ts_add : { $gte : start } })
無數據返回。
如果我使用相同的輸入數據並將其轉換爲MongoID,在$ _id字段中搜索,則搜索成功。
有什麼建議嗎?我錯過了什麼?有感覺我站在距離樹三英寸的地方抱怨我怎麼沒有看到森林...
謝謝!
因此,讓我想到 - 你完全有權質疑第一個數據結構。在我的測試版本中,我通過將測試數據設置爲一個沒有參數的新MongoDate()對象來初始化測試數據。 但是,後來在代碼中,我將結構傳遞給驗證例程,以確保插入請求僅添加類的字段列表中列出的列。在插入到mongo之前,ary1到ary2的後續副本將結構從MongoDate()重新輸入到array()。 非常棒,非常感謝你的幫助! – 2012-04-27 00:02:43