【问题标题】:Find by some array items [duplicate]通过一些数组项查找[​​重复]
【发布时间】:2017-02-13 15:19:34
【问题描述】:

我有一个给定的数组A = [5, 15, 25, 35]

我有一个集合 C。它的所有文档都有字段“数字”,它是一个长度可变的数字数组。

我想匹配所有具有“数字”元素的文档,其中至少有 A 的 4 个元素中的 2 个。我应该如何有效地进行?

最好使用 find 而不需要聚合。

谢谢。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    使用aggregation 很容易。您需要将$size$setIntersection 一起使用,然后匹配相交数组中元素至少为2 个数字的所有文档:

    db.C.aggregate([
        {
            $project: {
                numbers: 1,
                intersectedNumbers: {
                    $size: {
                        $setIntersection: ['$numbers', [5,15,25,35]]
                    }
                }
            }
        },
        {
            $match: {
                'intersectedNumbers': {
                    $gte: 2
                }
            }
        }
    ])
    

    find 的问题更大,因为您需要两个阶段,如上面的aggregation,而find 则不可能。 但是,如果 A 数组是动态的,您可以做的是创建一个函数,该函数将返回“至少 2 个”元素的所有可能性,然后使用 $or$all 使用 find:

    db.C.find({
        $or: [
            {numbers: {$all: [5,15]}},
            {numbers: {$all: [5,25]}},
            {numbers: {$all: [5,35]}},
            {numbers: {$all: [15,25]}},
            {numbers: {$all: [15,35]}},
            {numbers: {$all: [25,35]}}
        ]
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 2011-04-26
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      相关资源
      最近更新 更多