我在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',
)
我真的卡住了,无法找到如何编写此查询的方法。有什么建议吗?
答案 0 :(得分:1)
我们想要的文件可以通过以下方式获得:
arrayField
没有元素的文档,
comparedArray
。arrayField
但不在comparedArray
中的至少一个元素。代码:
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);