我在 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/