6

ドキュメントのIDがMongoDbObjectIdsとして設定されたコレクションが1つあります(データベースに次のように表示されます:

Collection1

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

別のコレクションでは、これらを参照しています。ただし、これらの参照が適切なOIDとして保存されているように見える場合があります。

Collection 2

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

しかし、他の場合には、通常の文字列としてデータベースに組み込まれています。

Collection 2    

    "someForiegnId": "5003cb802e28076412000001",

私の質問は-これらの外部参照をOID形式で保存することは重要ですか、それとも単に文字列にすることができますか?

4

1 に答える 1

4

私は1年前の質問に答えていることを知っていますが、それでも.

データベース内で一貫性を保つことは常に望ましいことです。データをどのように保存するかに関係なく (たとえば、文字列"87.123.12.12"、配列[87, 123, 12, 12]または数値としての IP アドレス1467681804)、常に同じ方法である必要があります。データについても同じです。1 つの形式を選択して、それを使い続ける必要があります。

選択する形式は、使用するストレージの量とデータのクエリ速度に影響します。また、次の理由から、ObjectID として保存するのが最善の方法です。

  • objectIDを格納するのに 12 バイトしかかからないのに対し、同じものを文字列に格納するには 2 回かかります。確かにこれは小さな違いですが、完全に無料です。さらに、すべてのデータをメモリに (または少なくとも可能な限り) 収めようとする世界では、これは良い考慮事項です。したがって、HDD だけでなく RAM も節約できます。
  • ID から簡単にタイムスタンプを取得できます。オブジェクトがいつ作成されたかを取得すると便利な場合があります。文字列ではこれを行うことはできません
  • このフィールドに基づいてインデックスを作成することにした場合、そのサイズははるかに小さくなり、文字列でクエリを実行するよりもはるかに高速にクエリを実行できます (これは数値であるため)。

したがって、文字列表現しかない場合でも、ObjectID() に変更します。あなたの場合、これは間違いなく切り替える価値があります (おそらく既に行っていることはわかっています)。

PS次の回答のクエリを変更することで、フィールドを変更できます。

于 2013-11-09T05:50:23.270 に答える