ODM 查询生成器:是否有"inverse in"运算符或等效操作?



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

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

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

{
  "_id": 123,
  "name": "John",
  "countries_visited":
  [
    "Australia"
    "Bulgaria",
    "Canada"
  ]
}

我想查询我的数据库中访问过"加拿大"的人。现在,我正在按如下方式使用where属性,但我正在寻找更好的方法。

        $qb->field('countries_visited')->where("function(){
            return this.indexOf(".$countryName.") > -1
        }");

编辑:innotIn操作符接收一个数组作为参数,并将其与MongoDB中的单个值进行比较。我需要提供一个参数,并将其应用于MongoDB中的数组字段,因此"inverse-in"。如果有这样的事情,我想我需要一个contains运算符。

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

取自文件:

匹配阵列元素

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

所以你应该能够做

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

$qb->field('countries_visited')->equals('Canada');

相关内容

  • 没有找到相关文章

最新更新