在我的MongoDB集合中,我添加了如下记录
db.teacher.insert({_id:1 ,"name":"Kaushik"})
如果我搜索
db.teacher.find({name:"Kaushik"})
我得到一条记录。但是,如果我尝试'#34; NAME"而不是" name"即。
db.teacher.find({NAME:"Kaushik"})
它不会返回任何记录。
这意味着我必须知道schema元素是如何精确拼写的。有没有办法通过忽略schema元素的情况来编写查询。
我们可以使用不区分大小写的方法搜索元素值,如下所示
> db.teacher.find({name:/kAUSHIK/i})
{ "_id" : 1, "name" : "Kaushik" }
架构元素是否类似;
之类的东西> db.teacher.find({/NAME/i:"kaushik"})
答案 0 :(得分:3)
我们可以使用不区分大小写的[...]
来搜索元素值架构元素[?]
是否有类似的东西
没有
我们可以假设JavaScript和JSON区分大小写,MongoDB查询也是如此。
话虽如此,内部MongoDB使用BSON,而the specs对密钥的区分大小写没有任何说明。 BNF语法只表示元素名称是nul终止的modified UTF-8字符串:
e_name ::= cstring Key name
cstring ::= (byte*) "\x00" Zero or more modified UTF-8 encoded
characters followed by '\x00'. The
(byte*) MUST NOT contain '\x00', hence
it is not full UTF-8.
但是,从源代码(例如here或here)看来,MongoDB BSON的实现似乎使用strcmp
对元素名称进行二进制比较,确认没有办法实现你想要的。
这可能确实是一个超出区分大小写的问题,因为使用combining characters,相同的字符可能有几个二进制表示 - 但MongoDB不执行Unicode normalization。例如:
> db.collection.insert({"é":1})
> db.collection.find({"é":1}).count()
1
> db.collection.find({"e\u0301":1}).count()
0
答案 1 :(得分:0)
这与javascript引擎和json规范有关。在js标识符区分大小写。这意味着您可以拥有一个包含两个名为" name"的字段的文档。和"姓名"或" NAME"。所以mongodb作为你的领域的两个不同的归档。
答案 2 :(得分:-2)
您可以使用像
这样的正则表达式db.teacher.find({名称:/ ^ Kaushik将$ / I})