2

私の mongodb データベースのコレクションのフィールドの型は Unicode 文字列です。現在、このフィールドには、コレクション内のどのドキュメントにも関連付けられたデータがありません。タイプを文字列にしたくないのは、pymongo を使用して Python コードからサブフィールドを追加したいからです。

コレクションにはすでに多くのレコードが含まれています。したがって、コレクション内のすべてのドキュメントに対して、フィールドのタイプを Python の辞書のようなものに変更することは可能ですか?

助けてください ありがとう

4

2 に答える 2

1

「フィールドのタイプ...は文字列です」と「このフィールド...にはデータがありません」とはどういう意味かわかりません。フィールドはドキュメントに存在しますが、空の文字列に設定されているということnullですか?

いずれの場合も、MongoDBは「スキーマレス」です。つまり、コレクション内のすべてのドキュメントが同じ構造を持っている場合でも、ドキュメントに特定のスキーマを適用することはありません。

スキーマの宣言が必要なフレームワーク(MongoEngine、mongokitなど)を使用している場合は、フレームワークの使用に応じて変更を加える必要があり、使用しているフレームワークを知る必要があります。 。

純粋なpymongoを使用している場合は、必要に応じてドキュメントを変更できます。次のようなドキュメントがあるとします。

{name: "dcrosta", address: null }

そしてaddress、サブドキュメントを作成します。これはすべて1回の更新で実行できます。

db.people.update({address: None}, {'$set': {'address': {
     'street1': None,
     'street2': None,
     'city': None,
     'state': None,
     'zip': None,
}}}, multi=True)

(これはpymongoにあり、正確な構文はシェルまたは他のドライバーで少し異なります)

于 2011-07-22T12:06:57.500 に答える
1

確かに、現在のコレクションを反復処理し、既存の値を読み取り、新しい値 (ケースの埋め込みドキュメント) で上書きするスクリプトを作成するだけです。そのフィールドに新しい値を設定するだけで、フィールドのタイプを変更できます。たとえば、文字列フィールドを整数フィールドに設定する:

db.test.update({field:"string"}, {$set:{field:23}})

于 2011-07-22T12:03:19.757 に答える