2015-09-24 2 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

Спасибо за решение! Я немного изменил его в соответствии с моими потребностями, но концепция осталась прежней. –

Смежные вопросы