mongodb : 상위 객체 내에 가입자 배열 저장
문제
현재 다음과 같이 저장된 채널 컬렉션이 있습니다.
{ "_id" : ObjectId("4f5d1012d48147e840000000"), "title" : "Testing", "description" : "hello!", "created" : "2012-03-11 20:50:26", "user" : ObjectId("4f5d0408d48147207f000000") }
.
그러나 사용자가 이제이 채널을 구독하고 싶습니다.나는 이것이 중요한 컬렉션으로 간주 될 정도로 중요하다고 생각하지 않으므로 다음과 같이 저장하고 싶습니다 :
{
"_id" : ObjectId("4f5d1012d48147e840000000"),
"title" : "Testing",
"description" : "hello!",
"subscriptions" :
{ "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
{ "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
{ "user" : ObjectId("USERIDHERE"), "created" : DATETIME }
"created" : "2012-03-11 20:50:26",
"user" : ObjectId("4f5d0408d48147207f000000")
}
.
리튬 객체 내 에서이 작업을 세밀하게 구현하는 방법 주위에 머리를 가져 오는 것처럼 보입니다.$story->vote
속성은 모든 업데이트에서 푸시하는 배열이 될 것입니까?
해결책
IMHO, 구독을 사용하는 방법에 따라 달라질 수있는 구조는 방법.
이렇게 말하는 이유는 성능이 내장 된 몽고 객체 vs 링크 된 컬렉션을 사용하여 행에 문제가 발생하기 때문입니다. http://www.mongodb.org/display/docs/schema+design
사용자 ID를 가입과 함께 넣는 대신 채널 ID를 사용자와 연결하는 것을 제안합니다 (가입 한 사용자의 내장 컬렉션으로 채널 ID).
사용자의 컬렉션 (제어판 또는 대시 보드 또는 프런트 페이지 등)을 당길 때 표시 할 채널 목록이 있으므로 여기에서의 사용이 의미가 있습니다.
채널에 사용자 ID를 내장함으로써 채널을 표시하고 등록하는 모든 사용자가 스택 오버플로의 채팅 시스템과 같이 표시하는 경우에만 의미가 있습니다.
집계를 수행 할 계획을 세우거나 구독에 액세스하는 한 컬렉션에 더 많은 컬렉션을 갖는 경우에 별도의 컬렉션에 넣는 것이 좋습니다.
제휴하지 않습니다 StackOverflow