2012-02-26 4 views
1

이 SQL 데이터베이스 구조가 있습니다. A 사용자 테이블, 개체 테이블 및 사용자 계정에 개체를 할당하는 매핑 테이블 users_objects_map.개체 매핑 솔루션

SQL에서는 잘 작동합니다. 이 구조를 사용하면 객체의 객체를 쉽게 가져올 수 있습니다. 또한 여러 사용자에게 개체를 할당 할 수 있습니다.

 
users 
id 
firstname 
lastname 
... 

objects 
id 
... 

users_objects_map 
user_id 
object_id 

MongoDB로 이것을 구현하는 가장 좋은 방법은 무엇입니까?

첫 번째 아이디어는 할당 된 객체의 모든 ID가 저장 될 사용자에게 배열을 추가하는 것이 었습니다.

{"firstname":"John", "lastname": "Doe", "object_ids":["id","id2",...,"id-n"]}

하지만 사용자가 수천 개의 개체에 할당되면 어떻게됩니까? 나는 그것이 좋은 해결책이라고 생각하지 않는다. 그리고 개체에 할당 된 모든 사용자 또는 사용자에게 할당 된 모든 개체를 가져올 수있는 방법은 무엇입니까?

문제점에 대한 영리한 MongoDB 솔루션이 있습니까?

+0

당신이 할 수있는 일은 아마도 사용자 내에 객체 컬렉션을 저장하는 것입니다. MongoDB는 컬렉션 간의 조인을 허용하지 않습니다.이 스케일링에 대해서는 조심해야합니다. 어떤 볼륨인지 모르겠습니다. 상대하고. 또한 '객체'에 구조를 제공 할 수 있다면 검색에 도움이됩니다. 죄송하지만 실용적인 측면에 익숙하지 않으므로 예제 코드를 제공 할 수 없습니다. – dubs

답변

0

개체에 대한 참조로 BsonArrays 내의 개체 ID를 사용하는 것은 좋은 방법이며 사용자 자체의 "object_ids"내에서 BsonDocuments를 사용하는 것을 고려하면보다 쉽게 ​​확장 할 수 있고 "_id "(ObjectID) MongoDB가 이러한 ID를 색인화하면 성능이 향상됩니다.

결국 당신이이 명 컬렉션을 가지는 것, 하나는 사용자와이고 다른 하나는 객체이다 : 지금이 순간

user: 
{ 
    "_id" : "user_id", 
    "firstname" : "John", 
    "lastname" : "Doe", 
    "object_ids" : [ 
     { "_id" : "26548" , "futurefield" : "futurevalue" }, 
     { "_id" : "26564" , "futurefield" : "futurevalue" } 
    ] 
} 

난 정말 그들이 할 예정 객체의 종류를 모르는 .. 그러나 나는 당신에게 예제를 줄 수 있습니다 :

workshop object: 
{ 
    "_id>" : "user_id", 
    "name" : "C# for Advanced Users", 
    "level" : "300", 
    "location" : "Amsterdam, The Netherlands", 
    "date" : "2013-05-08T15:00:00" 
} 

지금은 재미있는 부분이오고 그 질문입니다. C#으로 개발 중이며 mongodb.org의 드라이버를 사용하고 있습니다.

예 : 개체 ID == "26564"인 모든 사용자에게 제공하십시오.

var query = from user in userCollection.Find(Query.EQ("objects_ids._id","26564")) 
      select user; 

이 쿼리는 문서 (이 경우 ID와 일치하는 사용자)를 반환합니다. 범위 값이있는 경우 다음을 사용하십시오. Query.All ("name", "BsonArray Values");

두 번째 쿼리는 BsonDocuments에 포함될 수있는 개체 ID의 ID를 찾거나 일치시킵니다.

var secondQuery = 
    from workshops in objectsCollection.Find(Query.EQ("_id", "userid")) 
    select cust["object_ids"].AsBsonArray.ToArray(); 

나는 당신을 이렇게 도왔습니다.

행운을 내세요!

관련 문제