比较MongoDB中的数组

时间:2014-12-05 10:33:46

标签: arrays mongodb

我在mongo中有一个有阵列字段的集合。当我查询该集合时,我想返回其数组字段中的元素代表数组的subset的文档,我将与之进行比较。因此,满足条件的文档中的所有数组元素也应该存在于数组I中,但该数组可以包含其他元素。

在这种情况下,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',
  )

我真的卡住了,无法找到如何编写此查询的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

  • 检查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);