MongoDB:在密钥中包含特殊字符的哈希上进行查询

MongoDB:在密钥中包含特殊字符的哈希上进行查询,mongodb,hash,database,Mongodb,Hash,Database,我开始使用MongoDB(顺便说一句,它看起来很棒),我有一个关于我的一个集合中的哈希数据类型的问题。理论上我有这样的东西: { "account_id": "BNM-X10-0123456789", "account_profile": { "Client code": "0123456789", "Discount %": "15" } } 如您所见,account\u profilehash中的键有一些空格和特殊字符!我知道您可能会

我开始使用MongoDB(顺便说一句,它看起来很棒),我有一个关于我的一个集合中的哈希数据类型的问题。理论上我有这样的东西:

{
    "account_id": "BNM-X10-0123456789",
    "account_profile": {
        "Client code": "0123456789",
        "Discount %": "15"
    }
}
如您所见,
account\u profile
hash中的键有一些空格和特殊字符!我知道您可能会建议“只需将其更改为
client\u code
discount\u pct
”,但我无法控制这些键,它们完全是用户定义的,本质上,它们肯定会包含空格和特殊字符

所以,最初的问题是:如何对这些信息执行查询?我-显然-知道
db.foo.find({“account\u profile.discount\u pct:“15”})
中的点表示法不起作用,但是有替代方法吗

作为一个附带问题,是否有更好的方法来实现相同的功能,同时将所有信息嵌套在集合中


谢谢大家。:)

如果您知道密钥名称,您可以通过

db.foo.find({'account_profile.discount_pct' : '15'})
查看测试数据

> db.foofoo.insert({name:'ram',account_profile : {"Client code": "0123456789",'discount_pct' : 2}})
> db.foofoo.insert({name:'ram',account_profile : {"Client code": "0123456789",'discount_pct' : 2}})
> db.foofoo.insert({name:'ram',account_profile : {"Client code": "01236789",'discount_pct' : 5}})
> db.foofoo.insert({name:'ram',account_profile : {"Client code": "01236789",'discount_pct' : 2}})
> db.foofoo.insert({name:'ram',account_profile : {"Client code": "01236789",'discount %' : 2}})
> db.foofoo.insert({name:'ram',account_profile : {"Client code": "01236789",'discount_pct' : 4}})
> db.foofoo.insert({name:'ram',account_profile : {"Client code": "01236789",'discount_%' : 4}})
> db.foofoo.insert({name:'ram',account_profile : {"Client code": "01236789",'discount_%' : 2}})
> db.foofoo.find({'account_profile.discount_%': 2})
{ "_id" : ObjectId("4eb0c9965325a7760cfda3db"), "name" : "ram", "account_profile" : { "Client code" : "01236789", "discount_%" : 2 } }
> db.foofoo.find({'account_profile.discount_pct': 2})
{ "_id" : ObjectId("4eb0c9725325a7760cfda3d5"), "name" : "ram", "account_profile" : { "Client code" : "0123456789", "discount_pct" : 2 } }
{ "_id" : ObjectId("4eb0c97c5325a7760cfda3d7"), "name" : "ram", "account_profile" : { "Client code" : "01236789", "discount_pct" : 2 } }

多亏@Tilo在上面指出,您不能在字段名中使用句点字符“.”,因为它代表点符号。

根据以下来源,您可以在字段名中使用任何UTF8字符——唯一的例外是字段名中不允许使用的“.”字符(因为它用于查询子文档)和字段名不能以“$”字符开头

请参见: