假设我们有一些字符串数组。有一个用例,它必须完成。
let myArray = ['a', 'g', 'd', 'e']
let collections = [
{items:['a', 'b']}, ==> false
{items:['a', 'g']}, ==> true
{items:['d', 'f']}, ==> false
{items:['a', 'g', 'd', 'e']}, ==> true
{items:['a', 'g', 'd', 'e', 'o']}, ==> false
{items:['a', 'g','e']}, ==> true
{items:['g']}, ==> true
{items:['g', 'k']}, ==> false
]
我的目标:
首先,我知道此查询是如此昂贵,因为对于该数组的每个项目,我们都有该查询匹配项的阶乘。
如果数组中有2个元素,则有2个可能的查询。如果我们有4个元素,我们就有4 * 3 * 2 * 1个可能的查询。
我的第二个问题是:这相关吗? 用例旁边。
您可以使用$setIsSubset轻松实现这一点>
db.collection.aggregate([ { $addFields: { filteredCollections: { $filter: { input: "$collections", as: "collection", cond: { $setIsSubset: [ ["$$collection.items"], ["a", "g", "d", "e"] ] } } } } }, { $match: { "filteredCollections.0": {$exists: true} } } ])
对于精确匹配,您可以将$all与
$setIsSubset
结合使用。