嵌套元素MongoDB的组合/交叉产品

时间:2015-09-24 20:05:51

标签: mongodb mongodb-query aggregation-framework

有没有办法在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'
    }
]

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

1 个答案:

答案 0 :(得分:4)

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"
    }
]}