3

第一歩

> db.myCollection.find();
{ "_id" : ObjectId("2358523892345"), "field1" : "value 1", "field2" : [ { "subfield1" : "value 2" }, { "Subfield2" : "value 3" } ], "field3" : "value 4" }

フィールドの名前を に変更したいと考えていSubfield2ますsubfield2。私は試した:

ステップ2

> db.myCollection.update ( { "field3": "value 4" }, {$rename: {"Subfield2": "subfield2" } } )

そして再度 find() を実行すると、「ステップ 1」と同じ結果が得られます。つまり、フィールドの名前は変更されません。

MongoDB の用語を使用すると、私がやろうとしているのは、「配列に埋め込まれたドキュメントのフィールドの名前を変更する」ことだと思います。

参考文献

http://docs.mongodb.org/manual/reference/operator/rename/

4

2 に答える 2

0

この質問で回答されているように、コマンドラインから配列内のフィールドの名前を変更することはできないようです:

配列内のMongoDB名前変更データベースフィールド

ドキュメントに記載されているように、配列内のフィールドの名前を変更する方法はありません。唯一のオプションは、コレクション ドキュメントを反復処理し、それらを読み取り、$unset old/$set new 操作でそれぞれを更新することです。

ただし、ユーザー Liad Livnat によって提案されているように、RockMongo を介してこれらの値を変更することは可能です。

私の特定のインスタンスでは、配列も削除し、構造を次のように変更しました。

{
  "field1": "value 1",
  "field2": {"subfield1": "value 2", "subfield2": "value 3"},
  "field3": "value 4"
}

このオブジェクトのクエリは、次の方法で可能になりました。

db.myCollection.find( {"field2.subfield2":"value 3"} );
于 2013-09-03T06:30:59.930 に答える
-1

手動で更新する場合は、rockmongo をインストールすることをお勧めします。rockmongo は、mongo データベースを操作する優れたツールです。サーバー上で抽出して、データベースに接続するだけです。そこでは、mongo データベース、テーブル、およびレコードを非常に簡単に更新できます。

ロックモンゴ

于 2013-09-03T06:00:02.893 に答える