2

MongoDB の異なるコレクション (1 つの共通フィールド、データベースへの変更なし) から 2 つのドキュメントからデータを取得する必要があります。私は初心者です。これで私を助けてください

a = db.users.find(username:'abc@xyz.com')
b = db.tasks.find(username:'abc@xyz.com')

a と b がマージされた変数 c を取得するにはどうすればよいですか?

助けてください。これは些細なことかもしれませんが、私を助けてください。

4

5 に答える 5

2

ユーザーが両方のコレクションで一意である場合、関数 findOne() を使用します。これは、find() がカーソルを返すためです。したがって、mongoDB コンソールで 2 つのオブジェクトをマージするには、次のコードを使用できます。

function mergeObjects(a,b) {
    res = new Object();

    for (attr in a) 
          res[attr] = a[attr];
    for (attr in b)
          res[attr] = b[attr];

    // only if you wanna save it in a document again
    delete res["_id"];
    return res;
 }

a = db.users.findOne({"username" : 'abc@xyz.com'})
b = db.tasks.findOne({"username" : 'abc@xyz.com'})
c = mergeObjects(a,b)

うまくいけば、これで問題が解決します。

于 2012-06-18T02:32:57.567 に答える
2

merge()このメソッドは BSON Api で使用できます。a と組み合わせて b を取得し、結果を b に格納します。実行する前に b を c にコピーすることをお勧めします。

于 2012-06-15T19:12:15.280 に答える
0

データの集約については、MongoDB の map/reduce 機能に精通している方がよいでしょう。詳細については、こちらをご覧ください。

それが分かれば、Map (データの取得) 関数と Reduce (データの集計) 関数を書くのは難しくありません。

于 2012-06-15T19:07:57.090 に答える
0

アプリケーションでこれを行う必要があります。複雑なクエリを 1 つ実行するよりも必ずしも遅くなるとは限らないため、2 つのクエリを実行しなければならないことを心配する必要はありません。

于 2012-06-15T21:46:03.440 に答える