Map Reduce 操作を行わなくても、必要な情報を取得できるはずです。
まず、{'enabled': 1} に一致するドキュメントの「Products」コレクションをクエリし、そのクエリから $SHOP_IDs のリストを取得します (これは、「Shops」コレクションの _id 値に対応すると思います)。それらを配列に入れて、「Shops」コレクションに対して $in クエリを実行し、「name」に対するクエリと組み合わせます。
たとえば、次の 2 つのコレクションがあるとします。
> db.products.find()
{ "_id" : 1, "type" : "first", "enabled" : 1, "shop" : 3 }
{ "_id" : 2, "type" : "second", "enabled" : 0, "shop" : 4 }
{ "_id" : 3, "type" : "second", "enabled" : 1, "shop" : 5 }
> db.shops.find()
{ "_id" : 3, "name" : "L" }
{ "_id" : 4, "name" : "L" }
{ "_id" : 5, "name" : "M" }
>
最初に {"enabled" : 1} に一致するすべてのドキュメントを検索します
> db.products.find({"enabled" : 1})
{ "_id" : 1, "type" : "first", "enabled" : 1, "shop" : 3 }
{ "_id" : 3, "type" : "second", "enabled" : 1, "shop" : 5 }
上記のクエリから、_ids のリストを生成します。
> var c = db.products.find({"enabled" : 1})
> shop_ids = []
[ ]
> c.forEach(function(doc){shop_ids.push(doc.shop)})
> shop_ids
[ 3, 5 ]
最後に、shop_ids 配列内の _id 値が {name:"L"} にも一致するドキュメントについて、shops コレクションをクエリします。
> db.shops.find({_id:{$in:shop_ids}, name:"L"})
{ "_id" : 3, "name" : "L" }
>
Mongo と同等の結合操作を行うことに関して、同様の質問が以前に寄せられました。この質問には、追加のガイダンスを提供する可能性のあるリンクがいくつか含まれています:
How to join MongoDB collections in Python?
Map Reduce を試してみたい場合は、インクリメンタルな Map Reduce 操作を使用して 2 つのコレクションの値を結合したユーザーのブログ投稿へのリンクを次に示します。
http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/
上記により、コレクションから目的の情報を取得できることを願っています。