MongoDB objectId引用

UpT*_*eek 6 mongodb

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

Collection1

    "someId": {
        "$oid": "5003cb802e28076412000001"
    },
Run Code Online (Sandbox Code Playgroud)

在另一个集合中,我引用了这些.但有时这些引用似乎存储为正确的oid:

Collection 2

    "someForiegnId": {
        "$oid": "5003cb802e28076412000001"
    },
Run Code Online (Sandbox Code Playgroud)

但有时候他们把它作为普通字符串放入数据库.

Collection 2    

    "someForiegnId": "5003cb802e28076412000001",
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*ali 4

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

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

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

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

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

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