MongoDB:创建一个视图,它是多个集合的联合

时间:2017-04-20 12:36:01

标签: mongodb

我目前有一个集合,我需要分成几个较小的集合。有没有办法让View包含所有较小集合的联合?

根据MongoDB Manual,我可以在管道中使用 $ lookup 运算符,但最终更像是" join"而不是" union"。

以下是我想要做的一个例子:

当前收藏:

{ _id: 1, name: "abc", country: "us" }
{ _id: 2, name: "def", country: "us" }
{ _id: 3, name: "123", country: "de" }
{ _id: 4, name: "456", country: "de" }

分裂成:

Collection_US

{ _id: 1, name: "abc", country: "us" }
{ _id: 2, name: "def", country: "us" }

Collection_DE

{ _id: 3, name: "123", country: "de" }
{ _id: 4, name: "456", country: "de" }

然后,发表观点:

查看

{ _id: 1, name: "abc", country: "us" }
{ _id: 2, name: "def", country: "us" }
{ _id: 3, name: "123", country: "de" }
{ _id: 4, name: "456", country: "de" }

是否可以这样做?

2 个答案:

答案 0 :(得分:0)

非常hacky,但适用于小型收藏。如果收藏很大,你可能最终不得不使用真实的收藏品。

print(y)
[14 15 16]

答案 1 :(得分:0)

这与taminov的代码相同。

db.createView('union_view', 'us', [
  {
    $facet: {
      us: [
        {$match: {}}
      ],
      de: [
        {$limit: 1},
        {
          $lookup: {
            from: 'de',
            localField: '__unexistingfield',
            foreignField: '__unexistingfield',
            as: '__col2'
          }
        },
        {$unwind: '$__col2'},
        {$replaceRoot: {newRoot: '$__col2'}}
      ]
    },
  },
  {$project: {data: {$concatArrays: ['$us', '$de']}}},
  {$unwind: '$data'},
  {$replaceRoot: {newRoot: '$data'}}
])