2016-06-13 5 views
2

comment BSON 안에 post의 ObjectId를 저장합니다.

{ "_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 바이트 이하 제공을 목적.

게임을 거래 할 가치가 있습니까? 예, 필드가 색인 될 때 ​​- 색인 파일이 더 작음 => 더 빠르며, 읽기가 적고, 성능이 우수합니다.

관련 문제