请注意,您发送到 MongoDb的不是JSON,而是 javascript 对象。这里的区别)。因此,以下表达式是等价的。
// unquoted key
db.col.insert({ 1: "key 1 unquoted"})
// quoted key
db.col.insert({ "1": "key 1 quoted"})
所以回到你的问题,唯一的区别是在一种情况下你有1
as key,而在另一种情况下_1
.
但当然,这也取决于您使用什么驱动程序将此数据写入 Mongo。如果您发现引用或不引用密钥之间有任何区别,他们可能会感到内疚。在 mongo shell 中进行测试,您会得到相同的结果。
以上对于顶级键都是正确的。但是如果你有其他级别的键1
, 2
,3
事情会变得很棘手,因此我建议你不要使用数字作为键。问题来自处理数组时的 Mongo 查询语法。
假设将以下文档放入一个集合中:
{
"foo": {
"0": "abc"
},
"bar": [ "x", "y", "z"]
}
以下两个查询均有效:
db.col.find({ "foo.0": "abc" })
db.col.find({ "bar.0": "x" })
只是语义不同:
- 在前一个查询中,您查询包含
foo
键的文档,该键是具有值object
的键0
abc
- 在后一个查询中,您要求包含在第一个位置 ( )上的
bar
键的文档array
x
0
被解释