Mongodb ODM查询生成器:是否有一个;倒排;操作员,或同等操作?

Mongodb ODM查询生成器:是否有一个;倒排;操作员,或同等操作?,mongodb,symfony,odm,Mongodb,Symfony,Odm,在我的synfony2项目中,我使用查询生成器过滤搜索结果。在我的MongoDB中,数组中有一些值 具有“in”运算符,允许查询等于数组中多个值之一的值。我想执行相反的操作,即给定一个值,查询数据库中包含数组的条目,该数组包含我的值 例如,假设我在MongoDB中有以下条目: { "_id": 123, "name": "John", "countries_visited": [ "Australia" "Bulgaria", "Canada" ] }

在我的synfony2项目中,我使用查询生成器过滤搜索结果。在我的MongoDB中,数组中有一些值

具有“in”运算符,允许查询等于数组中多个值之一的值。我想执行相反的操作,即给定一个值,查询数据库中包含数组的条目,该数组包含我的值

例如,假设我在MongoDB中有以下条目:

{
  "_id": 123,
  "name": "John",
  "countries_visited":
  [
    "Australia"
    "Bulgaria",
    "Canada"
  ]
}
我想查询我的数据库,查找访问过“加拿大”的人。现在,我正在使用
where
属性,如下所示,但我正在寻找更好的方法

        $qb->field('countries_visited')->where("function(){
            return this.indexOf(".$countryName.") > -1
        }");
编辑:
in
notIn
操作符接收数组作为参数,并将其与MongoDB中的单个值进行比较。我需要提供一个参数,并将其应用于MongoDB中的数组字段,从而实现“反向输入”。如果有这样的事情,我想我需要一个
contains
操作符。

有趣的是,MongoDB会自动处理这个问题。如果针对数组字段查询单个值,Mongo将假定您希望检查数组是否包含该值

摘自:

匹配数组元素

相等匹配可以指定数组中要匹配的单个元素。如果数组至少包含一个具有指定值的元素,则这些规范匹配

所以你应该能做到

$users = $dm->getRepository('User')->findOneBy([
    'countries_visited' => 'Canada'
]);


我本以为
notIn()
就是你要找的:)不,请先读完整的解释,而不仅仅是标题。我读了,但我不理解itAdam Elsodaney,我在问题的末尾添加了一个摘要,试图更好地解释它。您将如何查询所有访问过加拿大的人?谢谢,现在我明白了。Equals运算符将在数组中工作?将尝试返回结果。谢谢,真的。作为旁注,这只会将数组移动一个级别,而不适用于数组内部的数组。
$qb->field('countries_visited')->equals('Canada');