嵌套元素的合并/叉积MongoDB

Rob*_*ndl 1 mongodb mongodb-query aggregation-framework

有没有一种方法可以在MongoDB中组合/产生嵌套元素的叉积。举例来说,我有

{
  images: 
  [
    {
        name: 'A',
        url: 'urlA'
    }, 
    {
        name: 'B',
        url: 'urlB'
    }
  ],
  tags: [
    {
        name: 'Tag1',
        description: 'description1'
    },
    {
        name: 'Tag2',
        description: 'description2'         
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

通过首选结果应该是

[
    {
        url: 'urlA',
        name: 'Tag1'
    },
    {
        url: 'urlA',
        name: 'Tag2'
    },
    {
        url: 'urlB',
        name: 'Tag1'
    },
    {
        url: 'urlB',
        name: 'Tag2'
    }
]
Run Code Online (Sandbox Code Playgroud)

是否可以将生成的文档存储在新集合中?

nir*_*rji 5

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,
 }
},]);
Run Code Online (Sandbox Code Playgroud)

输出量

{
"result": [
    {
        "url": "urlA",
        "name": "Tag1"
    },
    {
        "url": "urlA",
        "name": "Tag2"
    },
    {
        "url": "urlB",
        "name": "Tag1"
    },
    {
        "url": "urlB",
        "name": "Tag2"
    }
]}
Run Code Online (Sandbox Code Playgroud)