在我的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
}");
编辑:
in
和notIn
运算符接收数组作为参数,并将其与MongoDB中的单个值进行比较。我需要提供一个参数并将其应用于MongoDB中的数组字段,因此"反转在"中。我想我需要一个contains
运算符,如果有这样的话。
答案 0 :(得分:2)
有趣的是,MongoDB会自动处理这个问题。如果针对数组字段查询单个值,Mongo将假设您希望检查数组是否包含该值。
取自docs:
匹配数组元素
Equality matches可以指定要匹配的数组中的单个元素。如果数组包含至少一个具有指定值的元素,则这些规范匹配。
所以你应该能够做到
$users = $dm->getRepository('User')->findOneBy([
'countries_visited' => 'Canada'
]);
或
$qb->field('countries_visited')->equals('Canada');