私はmongoが初めてで、これを噛む方法が本当にわかりません:
owners
コレクションに次のスキーマがあるとします。
{
_id: ObjectId,
name: "name",
cars: [ObjectId, ObjectId, ObjectId, ...]
}
配列内の_ids は、cars
他のコレクションに関連していますcars
。
現在、すべての所有者は多くの車を持つことができ、すべての車は複数の所有者を持つことができます (単なる多対多の関係)。
例えば
[
{'_id':'1', 'name':'Mr. A', cars: ['1','2',3',4',5'] },
{'_id':'2', 'name':'Mr. B', cars: ['6'] },
{'_id':'3', 'name':'Mr. C', cars: ['1','2'] },
{'_id':'4', 'name':'Mr. D', cars: ['2',3',5','6','7'] },
{'_id':'5', 'name':'Mr. E', cars: ['6'] }
]
問題は、Aさんがどのオーナーと車をシェアしているかをどうやって調べるかだ。
Aさんの場合、このような結果を得る方法:
[
{'owner_id': '3', 'cars': 2},
{'owner_id': '4', 'cars': 3}
]
集計フレームワークを使用しようとしましたが、その方法がわかりません。
編集
私はこの関数を書きましたが、それが正しい方法かどうかわかりません
function (owner)
{
ret = {}
owner.cars.forEach(function (car) {
db.owners.find({cars: car}).forEach(function(own2){
if(own2._id == owner._id){
return;
}
if(ret[own2._id.str] !== undefined){
ret[own2._id.str] += 1;
}
else{
ret[own2._id.str] = 1;
}
});
});
return ret
}