-1

どうすればMongoDBでライブデータスキーマを変更できますか?

たとえば、次のドキュメントを含む「ユーザー」コレクションがあるとします。

var user = {
    _id:123312,
    name:"name",
    age:12,
    address:{
        country:"",
        city:"",
        location:""
    }
};

さて、私のアプリケーションの新しいバージョンで、新しいプロパティを「ユーザー」エンティティに追加すると、体重、背の高い、または大人(ユーザーの年に基づく)としましょう。大人を持たない現在のすべてのライブデータを変更する方法財産。MapReduce とグループ集計コマンドを読んだのですが、これらは快適で、分析操作やその他の計算に適しているように見えたり、間違っていたりします。

では、MongoDB で現在実行中のデータ スキーマを変更する最善の方法は何でしょうか?

4

1 に答える 1

1

それは本当にあなたのプログラミング言語に依存します。MongoDB は、動的スキーマを持つことが非常に得意です。現時点でのあなたの思考パターンは、SQL に関連しすぎていると思います。そのため、すべての行にまだ値がなくても、新しいフィールドが必要であると考えています。

現実はかなり異なります。入力する意味がない行にはフィールドは必要ありません。アプリケーションでは、返されたドキュメントに値があるかどうかを確認するだけで済みます。値がない場合は、固定 SQL スキーマのように、値はnullです。

したがって、これは MongoDB が優れている点の 1 つであり、その新しいフィールドをオンデマンドでスキーマ全体に適用する必要がないという事実です。代わりに、ユーザーがデータを入力するときに遅延入力を行うことができます。

そのため、フィールドをアプリケーションにコーディングするだけで、ユーザーに作業を任せることができます。

このフィールドを追加する最善の方法は、次のように、コンソールを閉じるか、レプリカのプライマリ (ある場合はサーバー上) にループを書き込むことです。

db.users.find().forEach(function(doc){
    doc.weight = '44 stone';
    db.users.save(doc);
});

それは現在、あなたが求めているようなことをするための最良の方法です.

于 2013-04-18T12:52:30.890 に答える