0
我想要能够执行联合然后交集。MongoDB联盟和一个通话中的交集
我的文档strucuture:
{
"_id" : 1,
"items" : [
52711,
201610,
273342,
279449,
511250
]
},
{
"_id" : 2,
"items" : [
246421,
390200
]
}
此集合包含的数以千计的上述形式的文献。 我想在文档集上执行联合,然后在从联盟返回的集合上执行交集。
例如:
Set 1 contains Id: [1,2,3,4,5]
Set 2 Contains Id: [3,4,5,6,7,8]
Set 3 Contains Id: [12,14,15,16,17]
它应该在联合组1中的所有列表中的项目,并设置2和组3然后在每一组的结果来执行相交。
db.getCollection('Test').aggregate([
{ "$match": { "_id": { "$in": [1, 2, 3] } } },
{
"$group": {
"_id": 0,
"data": { "$push": "$items" }
}
},
{
"$project": {
"items": {
"$reduce": {
"input": "$data",
"initialValue": [],
"in": { "$setUnion": ["$$value", "$$this"] }
}
}
}
}
])
而且我做的这一切在C#现在:
,做清单的工会如下到目前为止,我有查询
var group = new BsonDocument
{
{ "_id", 0 },
{
"data", new BsonDocument {{"$push", "$items" } }
}
};
var project = new BsonDocument
{
{"items", new BsonDocument
{
{ "$reduce", new BsonDocument
{
{ "input", "$data"},
{ "initialValue", new BsonArray()},
{ "in", new BsonDocument { {"$setUnion", new BsonArray { "$$value", "$$this" }}}}
}
}
}
}
};
var result = qaCollection.Aggregate()
.Match(Builders<QAList>.Filter.In(x => x.Id, list))
.Group(group)
.Project(project)
.FirstOrDefault();
这个查询需要一定的时间,因为它可能会返回大量数据。所以,如果我可以传递多个集合,并且它将联合分离集合并相交,那么它会非常好,所以数据不会很大。
在此先感谢..