在MongoDB中对数组执行不区分大小写的查找?

时间:2010-05-21 07:30:54

标签: php mongodb case-insensitive nosql

所以,我决定让我的脚受到MongoDB的影响,并且喜欢它。它似乎非常快速和灵活,这是伟大的。但是,我仍然在经历最初的学习曲线,因此,我花了几个小时来挖掘最基本的东西。

我在整个MongoDB在线文档中进行搜索,花了几个小时浏览页面,没有提到这一点。我知道Mongo还是很新的(v1.x)所以它解释了为什么还没有太多的信息。我甚至试图在没有太多运气的情况下在Mongo上寻找书籍。所以,是的,我已经尝试过没有运气的RTM,所以,现在我转向你。

我有一个嵌套在每个文档中的各种Hashtags数组(即:#apples,#orange,#Apple,#APPLES),我想执行一个不区分大小写的find()来访问包含apple的所有文档任何情况。似乎find确实用/ i支持一些正则表达式,但我似乎无法使其工作。

无论如何,我希望这是对某人的快速回答。

这是我在PHP中的现有调用,区分大小写:

$cursor = $collection->find(array( "hashtags" => array("#".$keyword)))->sort(array('$natural' => -1))->limit(10);

帮助?

2 个答案:

答案 0 :(得分:0)

我怀疑你的查询没有返回你真正想要的东西......

如果你这样做

db.col.find( { some_array_field: ["item1", "item2"] } );

然后匹配some_array_field中完全包含这两项的文档。因此,如果有一个带有[item1,item2]主题标签的文档,它将匹配,但带有[item1,item2,item3]标签的文档将不匹配。

您可以使用本帖所述的$ all参数:

How do you do an AND query on an array in mongodb?

e.g。

db.col.find( { some_array_field: { $all : ["item1", "item2"] } } );

或:

db.col.find( { some_array_field: "item1", some_array_field: "item2" } );

完全文档匹配和部分匹配的区别对我来说在MongoDB中确实令人困惑。

答案 1 :(得分:0)

mongodb

php不区分大小写的搜索示例
$search_string='baR';

$searchQuery = array(
            '$or' => array(
                array(
                    'field1' => new MongoRegex("/^$search_string/i"),
                    ),
                array(
                    'field2' => new MongoRegex("/^$search_string/i"),
                    ),
                )
            );

$cursor = $customers->find($searchQuery);

希望这有帮助。