我目前有一个集合,我需要分成几个较小的集合。有没有办法让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" }
是否可以这样做?
答案 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'}}
])