2

既に実行され、データを保存している既存の mongoDB サーバーを取得しました。これには、" name " と " id " というコレクションが含まれているとします。コマンドを使用してこれらのコレクションを保存しinsertます。ここで、新しいコレクションを追加する必要があります。「アドレス」としましょう。を使用して「アドレス」コレクションを追加することはできinsertますか? mongoDB は使用するたびに新しいスキーマを作成しinsertますか、それともスキーマを更新するだけですか? つまり、mongoDBは上記の 3 つを含む新しい スキーマを作成するのでしょうか、それとも既存のスキーマを新しいスキーマで更新するだけなのでしょうか? 既存のコードで自分自身をよりよく説明します:

var env = {
    'User': 'aaa',
    'Pass': '123',
    'stats_a': 'collectionA',
    'db_name': 'localhost:27017/nodedb',
    'proxy_name': 'proxy',
    'proxy_port': 8080
};
var monk = require('monk');
var db = monk(env.db_name);
//now i will get the collection and store data in it
 var CollectionA = db.get(env.stats_a);
// create data to insert...
      CollectionA.insert(data)

今、私は新しいパラメータを追加してからvar env、次のように挿入したいと思います:

var env = {
    'User': 'aaa',
    'Pass': '123',
    'stats_a': 'collectionA',
//new collection
        'stats_b': 'collectionB',
//new collection
        'db_name': 'localhost:27017/nodedb',
        'proxy_name': 'proxy',
        'proxy_port': 8080
    };
    var monk = require('monk');
    var db = monk(env.db_name);
    //now i will get the collection and store data in it
     var CollectionA = db.get(env.stats_a);
     var CollectionB = db.get(env.stats_b);
    // create data to insert...
          CollectionA.insert(data)
          CollectionB.insert(data)

私が使用すると更新が機能する後のコードです(time_stampが存在すると仮定します):

 var retJson = {A: {}, B: {}};
     var CollectionA = db.get(env.stats_a);
        var CollectionB = db.get(env.stats_b);

    CollectionA.findOne({}, {sort: {time_stamp: -1}}, function (err, doc) {
        retJson.A = doc;
        CollectionB.findOne({}, {sort: {time_stamp: -1}}, function (err, doc) {
            retJson.B = doc;
            res.set('Access-Control-Allow-Origin', '*');
            res.send(retJson);
        });
    });

ありがとう!

4

1 に答える 1

2

あなたの用語は、あなたの質問ではまったく正しくありません。しかし、これはあなたの要求の良い要約だと思います: nameフィールドとidフィールドを持つドキュメントを含む mongodb コレクションがあります。insertコマンドを使用してこれらのドキュメントを作成しました。


あなたの質問 1: 「insert を使用して「住所」コレクションを追加することはできますか?」

を使用してドキュメントに新しいフィールド (つまり、住所) を追加できるかどうか尋ねていると思いますinsert

いいえ挿入コマンドは、新しいドキュメントを挿入するためだけに使用されますこれを使用して更新すると、 _idキーが重複しているためコマンドが失敗する、_id が指定されていないか、まだ存在しない場合は新しいドキュメントが作成されます。


あなたの質問 2:「mongoDB は挿入を使用するたびに新しいスキーマを作成しますか、それとも単にスキーマを更新しますか?」

あなたの言い回しは紛らわしいです。「スキーマ」ではなく「ドキュメント」を意味していると思います。

とにかく、insertコマンドを使用してドキュメントをコレクションに挿入するときにコレクションが存在しない場合、コレクションが作成されドキュメントがその新しいコレクションに挿入されます。

コレクションが既に存在する場合は、コレクション内に新しいドキュメントが作成されます。


あなたの質問 3:「mongoDB は、上記の 3 つを含む新しいスキーマを作成しますか?それとも、既存のスキーマを新しいスキーマで更新するだけですか?」

繰り返しますが、「スキーマ」ではなく「ドキュメント」を意味していると思います。

insertmongodb を使用すると、他の 2 つの質問で述べたように新しいドキュメントが作成されます。


概要

更新を行うには、updateコマンドを使用する必要があります。updateコマンドには、クエリ条件に一致するドキュメントがない場合にtrueupsertの場合に新しいドキュメントを作成するパラメーターがあることに注意してください。これはあなたに役立つかもしれません。

あなたの用語を助けるために:

  • コレクション- RDBMS の「テーブル」に相当します。データベース内に存在します。多くのドキュメントが含まれている可能性があります
  • document - mongodb コレクション内のレコード
  • field - ドキュメント内の名前と値のペア
于 2015-08-20T23:41:14.047 に答える