arrays - 比较 MongoDB 中的数组

标签 arrays mongodb

我在 mongo 中有一个包含数组字段的集合。当我查询该集合时,我想返回数组字段中的元素代表我正在比较的数组的子集的文档。因此,文档中满足条件的所有数组元素也应该出现在我正在比较的数组中,但该数组可以有其他元素。

在本例中,带有 ArrayField 的文档满足条件

    'ArrayField' => 
  array (
    'KeyA' => 'ValueA',
    'KeyB' => 'ValueB',
    'KeyC' => 'ValueC'
  )

'ComparedArray' => 
  array (
    'KeyA' => 'ValueA',
    'KeyB' => 'ValueB',
    'KeyC' => 'ValueC',
    'KeyD' => 'ValueD',
  )

在这种情况下文档不满足条件

'ArrayField' =>
  array (
    'KeyA' => 'ValueA',
    'KeyB' => 'ValueB',
    'KeyC' => 'ValueC'
  )

'ComparedArray' => 
  array (
    'KeyA' => 'ValueA',
    'KeyB' => 'ValueB',
  )

我真的很困惑,找不到如何编写此查询的方法。有什么建议吗?

最佳答案

我们想要的文件可以通过以下方式获取:

  • 检查 arrayField 没有元素的文档, comparedArray 中不存在。
  • 使用$elemMatch$nin运算符查找至少一个存在于 arrayField 中但不存在于 comparedArray 中的元素。
  • 使用 $not 应用否定条件操作符,到上面获取我们想要的文档。

代码:

db.collection.find({"arrayField":
                              {$not:
                                 {$elemMatch:
                                    {$nin:comparedArray}}}})

PHP:

$notIn= array('$nin'=>comparedArray);
$eleMatch= array('$elemMatch' => $notIn);
$not = array('$not' => $eleMatch);
$collection -> find(array("arrayField" => $not);

关于arrays - 比较 MongoDB 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27313899/

相关文章:

node.js - 如何使用nodeJS TCP服务器与MongoDB实现 session ?

node.js - 如何在 MongoDB 的数组字段中投影特定元素?

arrays - 如何将一维数组复制到另一个一维数组和二维数组?

Java 数独 - 不更改二维数组中的字段

c - 将未初始化的字符数组传递给函数。崩溃

node.js - 为什么我不能在 Mongoose Schema 键的开头使用 $ 字符

c# - 无法将 JSON 数组(例如 [1,2,3])反序列化为类型 ' ',因为类型需要 JSON 对象(例如 {"name":"value"})才能正确反序列化

javascript - setInterval 的替代方案,可以实时更改

python - 使用 mongoengine 将文件上传到 DEFAULT_FILE_STORAGE 而不是 GridFs

python - mongodb查询其中键可变的数据并使用python聚合结果