6

我有一个集合,文档的 ID 设置为 MongoDb 对象 ID(因此在数据库中显示为:

Collection1

    "someId": {
        "$oid": "5003cb802e28076412000001"
    },

在另一个集合中,我引用了这些。然而,有时这些引用似乎存储为适当的 oid:

Collection 2

    "someForiegnId": {
        "$oid": "5003cb802e28076412000001"
    },

但其他时候,他们将其作为普通字符串放入数据库。

Collection 2    

    "someForiegnId": "5003cb802e28076412000001",

我的问题是 -以 oid 格式存储这些外部引用很重要,或者它们可以只是字符串吗?

4

1 回答 1

4

我知道我正在回答一个 1 岁的问题,但仍然如此。

始终希望在您的数据库中保持一致。无论您如何存储数据(例如将 IP 地址作为字符串"87.123.12.12"、数组[87, 123, 12, 12]或数字1467681804),它都应该始终以相同的方式存储。您的数据也是如此:您必须选择一种格式并坚持使用。

您选择的格式会影响您将使用多少存储空间以及查询数据的速度。最好的方法是将它们存储为 ObjectID,原因如下:

  • 存储objectID只需要 12 个字节,而将其存储在字符串中需要两次。当然,这是一个很小的差异,但它绝对是免费的。此外,在您尝试将所有数据放入内存(或至少尽可能多地)的世界中,这是一个很好的考虑因素。因此,您不仅可以节省 HDD,还可以节省 RAM
  • 您可以轻松地从您的 ID 中获取时间戳。有时获取对象的创建时间可能很有用。使用字符串你不能这样做
  • 如果您决定基于此字段创建索引 - 它的大小会小得多,并且您会更快地查询它(因为这是一个数字)然后通过字符串查询。

因此,即使我只有字符串表示形式 - 我会更改为 ObjectID(),在您的情况下,这绝对值得切换(我知道您很可能已经这样做了)。

PS您可以通过修改以下答案中的查询来修改字段。

于 2013-11-09T05:50:23.270 回答