2016-06-13 7 views
2

postのObjectIdをcomment BSONに格納します。

{ "_id" : ObjectId("570175e6c002e46edb92aaa5"), "userid" : "56f3f70d4de8c74a69d1d5e1", "postid" : "5700edfe03fcdb000347beaa" } 

は今、私はpostid 5700edfe03fcdb000347bebc以下のすべての記事を検索する:次のように私のBSONスキーマの例があります。

は、だから私は行く:

"$match" : { 
      "postid" : { 
       "$lt" : "5700edfe03fcdb000347bebc" 
      } 
} 

しかし、LTの集計演算子はなくObjectIDString IDを比較しているとの結果が返さ$はまだ正確です。これは私のpostidsのリストであれば、:

{ "_id" : "5700edfe03fcdb000347beda" } 
{ "_id" : "5700edfe03fcdb000347bebf" } 
{ "_id" : "5700edfe03fcdb000347bebc" } 
{ "_id" : "5700edfe03fcdb000347bebb" } 
{ "_id" : "5700edfe03fcdb000347beaa" } 
{ "_id" : "5700edfb03fcdb000347bebe" } 
{ "_id" : "5700edfb03fcdb000347beba" } 

はそれが返されます:

{ "_id" : "5700edfe03fcdb000347bebb" } 
{ "_id" : "5700edfe03fcdb000347beaa" } 
{ "_id" : "5700edfb03fcdb000347bebe" } 
{ "_id" : "5700edfb03fcdb000347beba" } 

をしかし、私はこれは常にtrueになりますかしら以上単に運でしたか?

ObjectIDをソートすると、正確な結果が常に返されることを理解しています。ObjectIdの内部にタイムスタンプがあるため、タイムスタンプを使用してObjectIdを正確にソートできるからです。文字列の中にタイムスタンプがないので、正確に並べ替えますか?

答えて

1

Mongoは大文字と小文字を区別してASCII文字列比較を使用します。この場合、それは動作しますが、パフォーマンス領域で考えると遅いです。 OBJECTIDフィールドとして

は、12ビットのオブジェクトなので、文字列の等価は、二つの文書

{ 
    "_id" : ObjectId("575f2aa031dcfb59af388e1f"), 
    "a" : 2.0, 
    "id" : "575f2a5731dcfb59af388e1e" 
},{ 
    "_id" : ObjectId("575f2ab031dcfb59af388e21"), 
    "a" : 3.0, 
    "id" : ObjectId("575f2ab031dcfb59af388e20") 
} 

を有し、かつサイズチェック、より多くのスペースを取ります:使用している場合

Object.bsonsize(db.test.findOne({a:2})) // returns 66 
Object.bsonsize(db.test.findOne({a:3})) // returns 49 

は17のバイトが少なくなりますがオブジェクト。

このゲームはお買い得ですか?はい、フィールドがインデックスに登録されている場合 - インデックスファイルが小さい=>読み込み速度が遅く、パフォーマンスが向上します

関連する問題