0

MongoDB シェル バージョン 2.4.6 で非常に奇妙な問題が発生しています。これは、文字列から ISODate オブジェクトを作成することに関係しています。具体的な例については、以下を参照してください。

なぜこれが機能しないのですか。

collection.aggregate({$project: {created_at: 1, ts: {$add: new Date('created_at')}}}, {$limit: 1})
{
    "result" : [
        {
            "_id" : ObjectId("522ff3b075e90018b2e2dfc4"),
            "created_at" : "Wed Sep 11 04:38:08 +0000 2013",
            "ts" : ISODate("0NaN-NaN-NaNTNaN:NaN:NaNZ")
        }
    ],
    "ok" : 1
}

しかし、これはそうです。

collection.aggregate({$project: {created_at: 1, ts: {$add: new Date('Wed Sep 11 04:38:08 +0000 2013')}}}, {$limit: 1})
{
    "result" : [
        {
            "_id" : ObjectId("522ff3b075e90018b2e2dfc4"),
            "created_at" : "Wed Sep 11 04:38:08 +0000 2013",
            "ts" : ISODate("2013-09-11T04:38:08Z")
        }
    ],
    "ok" : 1
}
4

1 に答える 1

3

簡単な答えは、文字列 'created_at' を Date コンストラクターに渡すことです。不正な形式の日付文字列をコンストラクターに渡すと、ISODate("0NaN-NaN-NaNTNaN:NaN:NaNZ") が返されます。

新しい日付を適切に作成するには、'created_at' の内容を渡す必要があります。残念ながら、現時点では集計フレームワークを使用して文字列に対して日付コンストラクターを実行する方法を知りません。コレクションが十分に小さい場合は、コレクションを繰り返し処理し、各ドキュメントに新しい日付フィールドを追加することで、クライアントでこれを行うことができます。

于 2013-09-16T20:18:16.210 に答える