寻找完美子集
Finding perfect subsets
我们有请求 collection :
{
"_id" : ObjectId("xxxxxx"),
"requestId" : "REQ4",
"scrips" : "[3553, 5647]"
}
{
"_id" : ObjectId("xxxxxx"),
"requestId" : "REQ1",
"scrips" : "[0001]"
}
和纸条collection:
{
"_id" : ObjectId("xxxx"),
"scrip" : "0001"
}
{
"_id" : ObjectId("xxxx"),
"scrip" : "0456"
}
我们需要获取请求 collection 中所有请求的列表 - 谁拥有作为完整子集的 scrips collections。
预期输出:['REQ1']
我们如何以最有效的方式实现这一目标?
我们正在使用 java mongo 驱动程序 3.7
首先,尝试将请求集合中的脚本保存为字符串数组,而不是类似数组的字符串 ["3553"] 使其成为:
{
"_id" : ObjectId("xxxxxx"),
"requestId" : "REQ4",
"scrips" : ["3553", "5647"]
}
在那之后,您可以使用下面的代码来维护一个数组,其中包含来自代币集合的所有代币:
let allScrips=await scrips.aggregate([
{$group:{
_id:null,scrips:{$addToSet:"$scrip"}
}}
])
之后,在聚合管道中使用 $setIsSubset 将上面的 allScrips[0].scrips 数组与请求集合的 scrips 进行比较,仅当 allScrips.length 出现时
https://docs.mongodb.com/manual/reference/operator/aggregation/setIsSubset/
let requestsWithScrips=await requests.aggregate([
{ $project: {requestId:1,isSubset: { $setIsSubset: [ "$scrips",allScrips[0].scrips] }}},
{ $match:{isSubset:true}}
])
我们有请求 collection :
{
"_id" : ObjectId("xxxxxx"),
"requestId" : "REQ4",
"scrips" : "[3553, 5647]"
}
{
"_id" : ObjectId("xxxxxx"),
"requestId" : "REQ1",
"scrips" : "[0001]"
}
和纸条collection:
{
"_id" : ObjectId("xxxx"),
"scrip" : "0001"
}
{
"_id" : ObjectId("xxxx"),
"scrip" : "0456"
}
我们需要获取请求 collection 中所有请求的列表 - 谁拥有作为完整子集的 scrips collections。
预期输出:['REQ1']
我们如何以最有效的方式实现这一目标?
我们正在使用 java mongo 驱动程序 3.7
首先,尝试将请求集合中的脚本保存为字符串数组,而不是类似数组的字符串 ["3553"] 使其成为:
{
"_id" : ObjectId("xxxxxx"),
"requestId" : "REQ4",
"scrips" : ["3553", "5647"]
}
在那之后,您可以使用下面的代码来维护一个数组,其中包含来自代币集合的所有代币:
let allScrips=await scrips.aggregate([
{$group:{
_id:null,scrips:{$addToSet:"$scrip"}
}}
])
之后,在聚合管道中使用 $setIsSubset 将上面的 allScrips[0].scrips 数组与请求集合的 scrips 进行比较,仅当 allScrips.length 出现时
https://docs.mongodb.com/manual/reference/operator/aggregation/setIsSubset/
let requestsWithScrips=await requests.aggregate([
{ $project: {requestId:1,isSubset: { $setIsSubset: [ "$scrips",allScrips[0].scrips] }}},
{ $match:{isSubset:true}}
])