有没有办法在不使用map / reduce的情况下在mongodb中查询不区分大小写的值?
答案 0 :(得分:24)
假设您的文档包含tag
字段,并且您希望在其上进行搜索
Tags
{
tag,
...
}
第一个选项是使用正则表达式(但它运行缓慢,如@RestRisiko所说):
db.tags.find( { "tag" : { "$regex" : "C#", "$options" : "-i" } })
第二个选项是创建另一个小写字段(在mongodb中最好的方式):
Tags
{
tag,
tagLower,
..
}
像往常一样使用find
:
db.tags.find( { "tagLower" : "c#"})
它会更快,因为上面的代码可以使用索引进行搜索。
答案 1 :(得分:8)
您必须规范化要查询的数据。使用正则表达式进行不区分大小写的搜索可能也有效,因此不会使用索引。所以你唯一的选择是规范化。如果需要保留原始状态,则需要对数据进行非规范化,并将规范化值存储在文档的专用列中。
答案 2 :(得分:2)
与Node.js一起使用时,最好在查询中构建一个RegEx对象。
Room.findOne({'name': new RegExp(roomName, 'i')}, {}, function(err, room) {
...
答案 3 :(得分:0)
使用如下匹配的正则表达式。 ' i'显示不区分大小写。
var collections = mongoDatabase.GetCollection("Abcd");
var queryA = Query.And(
Query.Matches("strName", new BsonRegularExpression("MSID", "i")),
Query.Matches("strVal", new BsonRegularExpression("154800", "i")));
var queryB = Query.And(
Query.Matches("strName", new BsonRegularExpression("Operation","i")),
Query.Matches("strVal", new BsonRegularExpression("8221", "i")));
var getA = collections.Find(queryA);
var getB = collections.Find(queryB);