4

現在、次のようなドキュメントを含むコレクションがあります。

{ foo: 'bar', timeCreated: ISODate("2012-06-28T06:51:48.374Z") }

ここで、このコレクションのドキュメントにキーを追加してtimestampCreated、時間によるクエリを簡単にします。

updateand操作で新しい列を追加し$set、タイムスタンプ値を設定できましたが、これを使用して現在のタイムスタンプを設定しているようです。

db.reports.update({}, { 
    $set : { 
        timestampCreated : new Timestamp(new Date('$.timeCreated'), 0) 
    } 
}, false, true);

ただし、この列を追加して、その値を既存の「timeCreated」フィールドのタイムスタンプに設定する方法を見つけることができませんでした。

4

2 に答える 2

2

idフィールドとtimeCreatedフィールドのみに限定して、すべてのドキュメントを検索します。次に、それをループしてtimestampCreated値を生成し、それぞれに対して更新を実行します。

于 2012-07-05T01:00:33.000 に答える
-1

集約パイプライン(MongoDB 4.2以降)をupdateMany()受け入れることができるを使用して、日付をエポックからのミリ秒数に変換する演算子を利用します。$toLong

また$type、更新フィルターtimeCreatedのクエリを使用して、フィールドと日付タイプのドキュメントのみを制限します。

db.reports.updateMany(
    { 'timeCreated': {
        '$exists': true,
        '$type': 9
    } },
    [
        { '$set': { 
            'timestampCreated': { '$toLong': '$timeCreated' } 
        } }
    ]
)
于 2020-11-14T20:04:23.123 に答える