如何在MongoDB中通过各种条件高效地查找文档?
如何在MongoDB中通过各种条件高效地查找文档?
我有一系列的图书文件,格式如下:
{
"title": "这本书",
"author": "乔·鲍勃",
"tags": ["狗", "搞笑", "竞赛"],
"categories": ["小说", "冒险"]
}
我想使用一个搜索栏根据任何标准找到一本书。我大部分都已经做到了,但我现在不确定我应该使用搜索还是聚合。我还希望所有的搜索都不区分大小写,但我无法弄清楚如何在$in操作符中使用类似$options: 'i'的东西。
$or: [
{'title': {$regex: search, $options: 'i'}},
{'author': {$regex: search, $options: 'i'}},
{'tags': {$in: [search]}},
{'categories': {$in: [search]}},
]
这是我在类似这样的数百个文档中搜索的最佳方式吗?还是我应该更倾向于使用聚合?
在MongoDB中高效地根据各种条件查找文档的方法是一个常见的问题。有些情况下,我们需要对数组进行大小写不敏感的搜索。下面将介绍解决这个问题的原因和方法。
首先,建议遵循一个方法来搜索所有字段,你可以参考这个方法。然而,如果你想继续使用自己的方法,也是完全有效的,下面是我会如何修改你的查询。
由于数组和字符串的匹配方式是相同的,因此在那里你实际上根本不需要$in
操作符。所以将那些categories
和tags
的搜索变成大小写不敏感是一个微不足道的问题。例如,假设我们要查找"Mark",那么任何包含"marketing"的categories
都应该被匹配到。下面是实现方法:
db.collection.find({ $or: [ { "title": { $regex: "Mark", $options: "i" } }, { "author": { $regex: "Mark", $options: "i" } }, { "tags": { $regex: "Mark", $options: "i" } }, { "categories": { $regex: "Mark", $options: "i" } }, ] })
你可以在Playground示例中测试这个方法。