2015-09-24 44 views
1

有沒有辦法在MongoDB中組合/生成嵌套元素的叉積。 作爲一個例子,我有嵌套元素的組合/交叉產品MongoDB

{ 
    images: 
    [ 
    { 
     name: 'A', 
     url: 'urlA' 
    }, 
    { 
     name: 'B', 
     url: 'urlB' 
    } 
    ], 
    tags: [ 
    { 
     name: 'Tag1', 
     description: 'description1' 
    }, 
    { 
     name: 'Tag2', 
     description: 'description2'   
    } 
    ] 
} 

通過最佳的結果應該是

[ 
    { 
     url: 'urlA', 
     name: 'Tag1' 
    }, 
    { 
     url: 'urlA', 
     name: 'Tag2' 
    }, 
    { 
     url: 'urlB', 
     name: 'Tag1' 
    }, 
    { 
     url: 'urlB', 
     name: 'Tag2' 
    } 
] 

是否可以存儲生成的文件在一個新的集合?

回答

3

MongoDB的查詢

db.test.aggregate([{ $unwind: '$images'},{ $unwind: '$tags'}, { "$group" : { "_id" : { "url": "$images.url","name": "$tags.name"}, } 
}, 
{ "$group" : { "_id" : null, 

    "result": { "$addToSet" : { "url" : "$_id.url", 
              "name" : "$_id.name" } 
         }, 
} 
}, 
{"$project":{ 
    "_id":0, 
    "result": 1, 
} 
},]); 

輸出

{ 
"result": [ 
    { 
     "url": "urlA", 
     "name": "Tag1" 
    }, 
    { 
     "url": "urlA", 
     "name": "Tag2" 
    }, 
    { 
     "url": "urlB", 
     "name": "Tag1" 
    }, 
    { 
     "url": "urlB", 
     "name": "Tag2" 
    } 
]} 
+0

謝謝你的解決方案!我稍微修改它以滿足我的需求,但概念保持不變。 –