匹配数组的精确项或仅匹配数组项的组合_ MongoDB

问题描述 投票:1回答:1

假设我们有一些字符串数组。有一个用例,它必须完成。

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
]

我的目标:

  1. 仅与一项完全匹配。
  2. 匹配这些项目的唯一组合。

首先,我知道此查询是如此昂贵,因为对于该数组的每个项目,我们都有该查询匹配项的阶乘。

如果数组中有2个元素,则有2个可能的查询。如果我们有4个元素,我们就有4 * 3 * 2 * 1个可能的查询。

我的第二个问题是:这相关吗? 用例旁边

mongodb mongoose
1个回答
0
投票

您可以使用$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结合使用。

© www.soinside.com 2019 - 2024. All rights reserved.