query - parse date mongodb
mongo: new Date() en $ proyecto agregado (2)
Para campos calculados adicionales en la proyección, debe usar el operador $ add, como este: (ejemplo de consola)
db.so.aggregate([{$project: {date: {$add: Date() }}}])
pero está mal y nos aparece un mensaje de error:
exception: $add does not support strings (or dates)
Pero me encontré con un simple hack =)
db.so.aggregate([{$project: {date: {$substr: [Date(), 0, -1] }}}])
En este caso, habremos esperado el resultado con fechas Además, en la salida de PHP puede ver un error como este:
exception: disallowed field type Date in object expression (at ''date'')
Y ahora, solución (sintaxis php 5.4):
$so->aggregate([
[''$project'' => ["date" => [''$substr'' => [new MongoDate(), 0, -1]] ] ]
]);
Para una de mis colecciones, que debe seguir siendo la marca de tiempo de Unix en lugar de isodate, normalmente convierto la marca de tiempo con la nueva Fecha (unix_timestamp).
Ahora necesito la new Date(ts)
en una agregación. (el ejemplo está en PHP)
''$ project'' => array (''day'' => ''$ new Date (ts)'', ...
''$ group'' => array ("_id" => array (''day'' => ''$ day)'', ...), ...
No llega en los resultados. El campo "día" en el resultado falta por completo.
¿Cómo conseguir esto convertido dentro de la agregación?
Para poder agregar un campo de marca de tiempo desde el documento, puede hacer esto, dado:
{"ts": 1400512120100}
para agregar como una fecha:
db.foo.aggregate({
$project: {
date: { $add: [new Date(0), "$ts"] }
}
})