길이가 너무 길어서는 안됩니다. 또한, 먼저 화합물 _id
{
_id:{
ChatID: "someId",
Date: ISODate("2017-10-30T00:00:00.000Z"),
UserID: "someUID"
}
}
에게 몇 가지 메모를 할 수 있습니다 : 날짜를 표시하기 위해 하지 사용 문자열을 마십시오. 우선, ISODate는 64 비트 부호없는 정수로 저장됩니다. 6 자로 저장된 날짜가있는 동안 공간을 절약 할 수 있지만 date operations in aggregations 및 normal date comparisons의 모든 기능이 느슨합니다. 불량 아이디어.
두 번째로, 모델이 충돌하기 쉽습니다. 같은 날짜에 같은 사용자가 특정 채팅에 하나의 메시지 만 게시 할 수 있습니다. 오늘의 두 번째 메시지는 이 정확히 일 것이므로 고유성의 제약 조건을 위반하게됩니다. 따라서 실제 ISODate를 밀리 초 단위로 사용해야합니다. 그리고 여전히 충돌 가능성이 적습니다 (두 응용 프로그램 서버에서 생성 된 날짜가 약간 시간당 현명한 경우). 이유는 there is an additional counter in ObjectId입니다. 여기
내가 그것을
{
_id: new ObjectId(),
ChatId: "someChat",
UserId: "someUser"
}
이유를 모델링 할 방법은 다음과 같습니다 ObjectId가 당신이 조회 할 수있는 타임 스탬프를 (내가 그러므로 나는이 위키 것, 예를 들어 줄만큼 충분히 C 번호를 모르는 포함 다른 사람들에게 그렇게 할 수있는 기회를주기 위해 답) 불필요한 복잡성을 제거하고 ChatId
및 UserId
에 대한 색인으로 충분히 빠릅니다.
@Markus에게 감사드립니다. (특정 날짜에 한 명의 사용자에 대해 단 하나의 메시지 만 있어야합니다.이 문서에는 특정 날짜에 대한 카운터 및 기타 활동 정보가 포함되어 있습니다.) – Blendester
@Blendster : 이것은 집계 작업과 비슷하게 들립니다. –