MongoDB objectId引用

时间:2012-08-03 11:47:59

标签: mongodb

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

Collection1

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

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

Collection 2

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

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

Collection 2    

    "someForiegnId": "5003cb802e28076412000001",

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

所以即使我只有字符串表示 - 我会改为ObjectID(),在你的情况下,这肯定是更糟糕的切换(我知道你很可能已经这样做了)。

P.S。您可以按modifying the query in the following answer修改字段。