Создал коллекцию mongo с использованием PHP-скрипта с подполем, инициализированным MongoDate. Полученное поле в коллекции выглядит следующим образом:
"ts_add" : { "sec" : 1335468966, "usec" : 420000 },
Когда я создаю свой запрос в этом поле в 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 выполняется успешно.
Какие-либо предложения? Что мне не хватает? У меня такое чувство, что я стою в трех сантиметрах от дерева, жалуюсь на то, как я не вижу лес …
благодаря!
mongod печатает все в формате JavaScript, который печатает даты в миллисекундах (из которых происходят все дополнительные 0). Таким образом, запрос для 1335337200 правильно превращается в 1335337200 * 1000 = 1335337200000.
Однако исходный фрагмент документа, который вы вставили, выглядит неправильно. "ts_add" : {"sec" : 1335468966, "usec" : 420000}
является JSON, но тип Date не должен выглядеть так, как в JavaScript. Как вы сохраняете даты? Похоже, что они преобразуются в другой тип объекта и затем сохраняются как «общий объект» вместо «тип даты».