当前位置: 首页 > 面试题库 >

选择其中一个数组字段中的所有值都存在于另一个数组中的文档

黄弘深
2023-03-14
问题内容

我不太确定该如何命名!

所以我有一系列的产品ID

var productIds = [139,72,73,1,6]

还有MongoDB中的一堆客户文档

{
    name: 'James',
    products: [ 73, 139 ],
    _id: 5741cff3f08e992598d0a39b
}

{
    name: 'John',
    products: [ 72, 99 ],
    _id: 5741d047f08e992598d0a39e
}

当他们所有的产品都出现在产品ID(productIds)数组中时,我想找到客户

我试过了:

'products' : {
    '$in': productIds
}

但这会返回John,即使产品ID列表中不存在99

我也尝试过:

'products' : {
    '$all': productIds
}

由于没有客户拥有所有产品,该产品不返回任何收益

有没有一种方法可以在单个查询中实现我所需要的,或者我将不得不进行一些后查询处理?

我也试过

'products': {
    '$in': productIds,
    '$not': {
        '$nin': productIds
    }
}

但这似乎在并非所有产品ID都匹配时也会回头客


问题答案:

您可以使用.aggregate()方法和$redact运算符执行此操作。在$cond表达式中,您需要使用$setIsSubset来检查“产品”数组中的所有元素是否都在“
productIds”中。这是因为您不能$in在条件表达式中使用

var productIds = [139,72,73,1,6];
db.customers.aggregate([ 
    { "$redact": { 
        "$cond": [ 
            { "$setIsSubset": [ "$products", productIds ] },
            "$$KEEP",
            "$$PRUNE" 
        ] 
    }} 
])


 类似资料:
  • 我有两个多维数组,我想通过使用其中一个数组的值和另一个数组的键来组合它们。数组如下: 阵列1: 阵列 2: 我想生成的结果数组如下: 有没有一个PHP函数可以用来完成这个任务?

  • 我想了解从另一个数组的所有元素中筛选一个数组的最佳方法。我尝试了筛选函数,但我不知道如何给它我想要删除的值。 类似内容: 如果过滤器功能不是有用的,你将如何实现它? 编辑:我检查了可能重复的问题,对于那些容易理解javascript的人来说,它可能很有用。如果答案被检查为好,事情就会变得简单。

  • 我编写了这段代码,它应该要求用户输入第一个数组的长度,其中包含他想要的数字,而不是在数量完成之前重复每个数字。之后,他需要询问数组的长度,并比累犯的数字。比,我需要检查是否所有的数字都包含所有的数字,如果是真的,打印它,如果不是,打印假的。在这段代码中,我已经用字符串数组替换了int[],因为我认为这就是它的工作方式。当我试图创建一个只有个位数的Int数组时,它工作得很好,当你想要像22这样的数字

  • 我有这个数组,还有另一个数组 我想从中删除存在于中的值。 我已经这样做了: 但我得到一个错误说v.index不是一个函数

  • 问题内容: 给定一个字节数组,我如何在其中找到(较小)字节数组的位置? 使用,该文档看起来很有希望,但是如果我正确的话,那只会让我在要搜索的数组中找到一个单独的字节。 (我认为这并不重要,但以防万一:有时搜索字节数组将是常规的ASCII字符,有时是控制字符或扩展的ASCII字符。因此使用String操作并不总是合适的) 大数组可能在10到10000个字节之间,而小数组大约在10个字节。在某些情况下

  • 问题内容: 我有一个数字值数组,我想从该数组中随机选择一个值,然后将其插入变量中。 我不确定您需要查看什么代码。所以, 这是我用来生成13个数字(1-13)并将其插入到数组中的循环。 效果很好,但是现在我需要从该数组中选择2个随机值(然后将其插入变量中,以备后用。 我到过很多网站,已经看到了类似的事情,例如将值插入到数组中,然后用于从数组中选择值,然后从数组中删除它。但是,无论何时我使用它都行不通