t1
スキーマに次のフィールドを持つコレクションがあります
_id, field1, field1
SQL のようなsetfield2
の値が必要です。field1
update t1 set field1=field2;
MongoDB でそれを行うにはどうすればよいですか?
t1
スキーマに次のフィールドを持つコレクションがあります
_id, field1, field1
SQL のようなsetfield2
の値が必要です。field1
update t1 set field1=field2;
MongoDB でそれを行うにはどうすればよいですか?
ここで良いニュースと悪いニュース。
悪いニュースは、私の知る限り、単一の 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 )
これは、次の方法で実行できます。
db.nameOfCollection.find().forEach(
function (elem) {
db.nameOfCollection.update(
{
_id: elem._id
},
{
$set: {
field2: elem.field1
}
}
);
}
);