1. ホーム
  2. mongodb

[解決済み】MongoDB: 1つのフィールドですべてのドキュメントを更新する

2022-04-01 08:45:11

質問

という名前のコレクションを持っています。 foo を仮定しています。

の各インスタンスは foo は lastLookedAt というフィールドを持っており、これはエポック以降の UNIX タイムスタンプです。MongoDBクライアントを経由して、すべての既存ドキュメント(約2万件)のこのタイムスタンプを現在のタイムスタンプに設定できるようにしたいのです。

これを処理する最良の方法は何でしょうか?

どのように解決するのですか?

バージョンに関係なく、あなたの例では <update> があります。

{  $set: { lastLookedAt: Date.now() / 1000 }  }

しかし、MongoDBのバージョンによっては、クエリの見た目が変わってきます。バージョンに関係なく、重要なのは 空の条件 {} はあらゆるドキュメントにマッチします。 . Mongo シェル、あるいは MongoDB クライアントで使用します。

バージョン >= 3.2 :

db.foo.updateMany( {}, <update> )

  • {} は条件です(空の条件はあらゆる文書にマッチします)。

3.2 > $バージョン >= 2.2 :

db.foo.update( {}, <update>, { multi: true } )

  • {} は条件です(空の条件はあらゆる文書にマッチします)。
  • {multi: true} は、quot;複数のドキュメントを更新するオプションです。

バージョン < 2.2 :

db.foo.update( {}, <update>, false, true )

  • {} は条件です(空の条件はあらゆる文書にマッチします)。
  • false は"用です。 アップサート パラメータ
  • true は、quot;multi"パラメータ用(複数のレコードを更新する)です。