2015-06-25 3 views
0

Как объединить документы из двух разных коллекций.Как объединить документы из двух разных коллекций

От shopping_collection мы можем получить историю покупок,

Чтобы получить подробную информацию о каждой истории покупки мне нужно, чтобы получить информацию от detailed_shopping_list_collection

Но, похоже, не представляется возможным сделать это с aggregate из-коллекция другой ?

Как я могу получить его с mapreduce?

shopping_collection

{ 
    "name": "Mary", 
    "gender": "M", 
    "birthday": new Date("1980-04-01T08:00:00+0800"), 
    "records": [ 
    { 
     "BUY_DATE": new Date("1996-02-08T08:00:00+0800"), 
     "SEQ_NO": 768, 
    }, 
    { 
     "BUY_DATE": new Date("1996-02-06T08:00:00+0800"), 
     "SEQ_NO": 595, 
    } 
} 

detailed_shopping_list_collection

{ 
    "BUY_DATE": new Date("1996-02-08T08:00:00+0800"), 
    "SEQ_NO": 768 
    "ITEM_NAME": "iphone4s" 
    "PRICE": 500 
}, 
{ 
    "BUY_DATE": new Date("1996-02-08T08:00:00+0800"), 
    "SEQ_NO": 768 
    "ITEM_NAME": "iphone4s" 
    "PRICE": 500 
}, 
{ 
    "BUY_DATE": new Date("1996-02-08T08:00:00+0800"), 
    "SEQ_NO": 768 
    "ITEM_NAME": "macbook" 
    "PRICE": 700 
} 

Ожидаемый агрегированный результат

{ 
    "name": "Mary", 
    "gender": "M", 
    "birthday": new Date("1980-04-01T08:00:00+0800"), 
    "records": [ 
    { 
     "BUY_DATE": new Date("1996-02-08T08:00:00+0800"), 
     "SEQ_NO": 768, 
     "PURCHASE_HISTORY":[ 
     {"ITEM_NAME": "iphone4s" 
       "PRICE": 500}, 
     {"ITEM_NAME": "iphone4s" 
       "PRICE": 500},     
     {"ITEM_NAME": "macbook" 
        "PRICE": 700} 
     ] 
     "UNIQUE_PURCHASE_ITEMS":[ "iphone4s", "macbook" 
     ] 
    }, 
    { 
     "BUY_DATE": new Date("1996-02-06T08:00:00+0800"), 
     "SEQ_NO": 595, 
    } 
} 

ответ

0

То, что вы пытаетесь достичь должно быть сделано на стороне клиента, используя несколько запросов, так как MapReduce не быть заменой для объединений. Однако есть некоторые интересные подходы, предложенные некоторыми людьми, например. http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/.

+0

я постараюсь это позже, спасибо за ваши советы – newBike

0

Пожалуйста, проверьте ниже запрос:

// MAP FUNCTION LOGIC 

var map = function(){ 
var arr = new Array(); 
this.records.forEach(function(doc){ 
    var temp = db.detailed_shopping_list_collection.find(
     {"BUY_DATE": doc.BUY_DATE, "SEQ_NO" : doc.SEQ_NO}); 
    arr.push(temp); 
       }); 
emit(this._id,{"name" : this.name, "gender" : 
    this.gender, "birthday" : this.birthday, "records" : arr); 
} 


// REDUCE FUNCTION LOGIC 

var reduce = function(id , doc){ return doc; } 


// MAP REDUCE CALL 
db.shopping_collection.mapReduce(map,reduce,{out: {inline :1}}); 
Смежные вопросы