0

我使用的是一系列数字的动态键。因为您必须双引号作为 JSON 中的键的数字,所以使用将数字转换为字符串的动态键与使用带下划线的数字作为字符串之间有什么区别吗?

基本上,将数字转换为字符串与将其与下划线连接(将其转换为字符串)的区别。

我似乎没有区别,但是,我想问每个人这个问题,因为有时会出现意想不到的区别。

{ "1" : "some content",
  "2" : "some more content"
}

versus

{ _1 : "some content",
  _2 : "some more content"
}

谢谢。

4

1 回答 1

2

请注意,您发送到 MongoDb的不是JSON,而是 javascript 对象。这里的区别)。因此,以下表达式是等价的。

// unquoted key
db.col.insert({ 1: "key 1 unquoted"})

// quoted key
db.col.insert({ "1": "key 1 quoted"})

所以回到你的问题,唯一的区别是在一种情况下你有1as 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的键0abc
  • 在后一个查询中,您要求包含在第一个位置 ( )上的bar键的文档arrayx0

被解释

于 2013-05-25T20:46:09.177 回答