20

isodate ではなく unix タイムスタンプのままにする必要があるコレクションの 1 つについては、通常、タイムスタンプを new Date(unix_timestamp) に変換します。

今、私new Date(ts)は集約に必要です。(例はPHPです)

'$project' => 配列 ( 'day' => '$new Date(ts)', ...

'$group' => 配列 ( "_id" => 配列('day' => '$day)', ...),...

結果には至りません。結果のフィールド「日」が完全に欠落しています。

これを集計内で変換するにはどうすればよいですか?

4

3 に答える 3

3

プロジェクションで計算されたフィールドを追加するには、次のように $add 演算子を使用する必要があります: (コンソールの例)

db.so.aggregate([{$project: {date: {$add: Date() }}}])

しかし、それは間違っていて、エラー メッセージが表示されます。

exception: $add does not support strings (or dates)

しかし、私は簡単なハックを見つけました =)

db.so.aggregate([{$project: {date: {$substr: [Date(), 0, -1] }}}])

この場合、期待される日付の結果が得られます。また、PHP の出力では、次のようなエラーが表示されます。

exception: disallowed field type Date in object expression (at 'date')

そして今、解決策(php 5.4構文):

$so->aggregate([
    ['$project' => ["date" => ['$substr' => [new MongoDate(), 0, -1]] ] ]
]);
于 2013-02-20T21:09:05.107 に答える