29

t1スキーマに次のフィールドを持つコレクションがあります

_id, field1, field1

SQL のようなsetfield2の値が必要です。field1

update t1 set field1=field2;

MongoDB でそれを行うにはどうすればよいですか?

4

3 に答える 3

46

ここで良いニュースと悪いニュース。

悪いニュースは、私の知る限り、単一の update() 呼び出しでは実行できないことです-mongoは、更新で現在のオブジェクトを参照することをサポートしていません。

良いニュースは、それを行う他の方法があることです。たとえば、forEach ループを実行できます。

db.item.find(conditions...).snapshot().forEach( function (doc) {
  doc.field1 = doc.field2; 
  db.item.save(doc); 
});

管理シェル (「mongo」コマンド) で forEach を実行するか、特定のドライバーのメソッドのいくつかを使用して実行できます (たとえば、PHP では、ここで説明されているように mongodb.execute() で動作すると予想されます: http:/ /www.php.net/manual/en/mongodb.execute.php )

于 2010-11-23T19:47:15.957 に答える
-1

これは、次の方法で実行できます。

db.nameOfCollection.find().forEach(
    function (elem) {
        db.nameOfCollection.update(
            {
                _id: elem._id
            },
            {
                $set: {
                    field2: elem.field1
                }
            }
        );
    }
);
于 2015-01-28T09:57:30.817 に答える