1

別のコレクションの別のドキュメントのIDが埋め込まれているドキュメントがあります。

私の望ましい結果は、最初のコレクションのすべてのフィールドと、埋め込まれたドキュメントのすべての友達を返すことです(私はpythonとpymongoを使用しています)。

mongoは結合を行わないことを理解しており、2つのクエリを実行する必要があることを理解しています。また、データを複製したくありません。

私の質問は、python / pymongoで2つのクエリをつなぎ合わせる方法です。これにより、両方のドキュメントのすべてのフィールドを含む1つの結果が得られます。

私のデータは次のようになります。

db.employees

{_id: ObjectId("4d85c7039ab0fd70a117d733"), name: 'Joe Smith', title: 'junior',
manager: ObjectId("4d85c7039ab0fd70a117d730") }

db.managers

{_id: ObjectId("ObjectId("4d85c7039ab0fd70a117d730"), name: 'Jane Doe', title: 'senior manager'}

望ましい結果

x = {_id: ObjectId("4d85c7039ab0fd70a117d733"), name: 'Joe Smith', title: 'junior',
    manager: 'Jane Doe' }
4

2 に答える 2

0

基本的に、Mongoがすぐにサポートしないことを行うと、2つのレコードを別々に使用するよりも実際には苦痛になります。

基本的に(私はPythonプログラマーではないので疑似/ JSコードで):

var emp = db.employees.find({ name: 'Joe Smith' });
var mang = db.managers.find({ _id: emp._id });

そして、そこには2つのレコードが別々にあります。@slownageが示すようにチェーンして、マージされた結果、または1つのqaueryからのMongoDBは、返すフィールドを1つだけ指定した場合でも、実際にはフィールドの値ではなくディクショナリを返すため、結果を取得することはできません。

したがって、これが実際に唯一の解決策であり、2つを別々に取得して、それらに取り組むことができます。

編集

ここでDBRefを使用することもできますが、これはこの方法で行うのとほとんど同じです。唯一の違いは、自分で行うのではなく、自分のモデルに入れるのがヘルパーであるということです。

于 2012-12-12T08:30:32.733 に答える
0

それが機能する場合は、次のようになります。

db.managers.find({
  '_id' => db->employees->find({ ('_id' : 1),
        ('_id': ObjectId("4d85c7039ab0fd70a117d733") }))
})

更新しました

于 2012-12-11T13:20:28.100 に答える