You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB查询:找出arrayProperty元素全在指定数组中的文档

查询MongoDB中数组所有元素都包含在指定数组的文档

要实现这个需求,我们可以用两种实用的方式来编写查询语句,下面结合你的示例数据详细说明:

方法一:使用$setIsSubset(MongoDB 3.2+ 推荐)

$setIsSubset操作符可以直接判断一个数组是否是另一个数组的子集,完美匹配我们的需求——检查arrayProperty的所有元素都包含在指定数组中。

查询语句如下:

db.yourCollectionName.find({
  $expr: {
    $setIsSubset: ["$arrayProperty", ["1", "2", "3", "4"]]
  }
})

原理说明

$setIsSubset: [A, B]会返回true当且仅当数组A中的每一个元素都存在于数组B中。代入你的场景,就是判断arrayProperty(即$arrayProperty)是否是指定数组["1","2","3","4"]的子集,逻辑直观又清晰。

方法二:使用$not + $elemMatch + $nin(兼容旧版本)

如果你的MongoDB版本低于3.2,可以用这种组合方式来实现需求:

查询语句如下:

db.yourCollectionName.find({
  arrayProperty: {
    $not: {
      $elemMatch: {
        $nin: ["1", "2", "3", "4"]
      }
    }
  }
})

原理说明

  1. $nin: ["1","2","3","4"]会匹配不在指定数组中的元素;
  2. $elemMatch会找到至少有一个元素满足上述条件的文档(也就是存在元素不在指定数组的文档);
  3. 最后用$not取反,就得到了所有元素都在指定数组中的文档。

验证你的示例数据

用上述任意一种查询,针对你提供的示例文档:

  • _id: "1"的arrayProperty: ["1","2"] → 所有元素都在指定数组,会被返回;
  • _id: "2"的arrayProperty: ["1","4"] → 所有元素都在指定数组,会被返回;
  • _id: "3"的arrayProperty: ["1","7","8"] → 包含"7""8"不在指定数组,被排除;
  • _id: "4"的arrayProperty: ["1","9"] → 包含"9"不在指定数组,被排除;

完全符合你期望的结果。

内容的提问来源于stack exchange,提问作者Monta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:48:34