寻找完美子集

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