2015-02-14 3 views
0

У меня возникли проблемы с пониманием того, как внедрены встроенные документы в мягкую схему, такую ​​как MongoDB. если дана данные-модель, как так:Встроенные документы в MongoDB

User{ 
    UserId: 
    Email: 
    Phone: 
    Reviews{ 
    Rating: 
    Comment: 
    }//End reviews 
} 

Означает ли это, каждый документ Пользователя имеет только один отзыв или что это формат, в котором все отзывы будут для пользователя?

Возможно, более реляционная модель это будет folloiwng:

User{ 
    UserId: 
    Phone: 
    Email: 
} 
Reviews{ 
    User:<UserID> 
    Rating: 
    Comment: 
} 

я знаю, с использованием ссылок означает медленный запрос, но я не понимаю, как встроенные документы позволят нескольких обзоров.

+1

в MongoDB вы можете h ave несколько документов для одного и того же пользователя, каждый с одним обзором или с документом, который имеет несколько обзоров, где часть отзывов в документе может быть массивом, в котором вы можете добавить к нему столько, сколько хотите. Надеюсь, это ответ на ваш вопрос. – faljbour

+0

@faljbour не могли бы вы привести пример того, что вы описали? – TheDude

+0

уверен, сделаю, я предоставлю по одному для каждого типа. – faljbour

ответ

1

В случае наличия нескольких документов для одного и того же пользователя MongoDB добавляет уникальный _Id в документ каждый раз, когда вы добавляете новый документ, поэтому этот wokrks хорош, когда вы добавляете несколько документов для одного и того же пользователя и как @wdberkeley заявил, что MongoDB не навязывает схемы,

"User" { 
     "UserId": "johndoe" 
     "Email": "[email protected]" 
     "Phone": "555-44444" 
     "Review"{ 
     "Rating": "5" 
     "Comment": "this is my first comment" 
     } 
    } 
    "User" { 
     "UserId": "johndoe" 
     "Email": "[email protected]" 
     "Phone": "555-44444" 
     "Review"{ 
     "Rating": "5" 
     "Comment": "this is my second comment" 
     } 
    } 

"User" { 
    "UserId": "johndoe" 
    "Email": "[email protected]" 
    "Phone": "555-44444" 
    "Review"{ 
    "Rating": "5" 
    "Comment": "this is my third comment" 
    } 
} 

В случае одного документа для одного пользователя с несколькими обзорами, это может работать тоже хорошо, всегда может получить документ и добавить добавлять отзывы к нему и вызвать дб. обновление() документа,

"User" { 
    "UserId": "johndoe" 
    "Email": "[email protected]" 
    "Phone": "555-44444" 
    "Reviews"{[ 
    { 
     "Rating": "5" 
     "Comment": "this is my first comment" 
    }, 
    { 
     "Rating": "5" 
     "Comment": "this is my second comment" 
    }, 
    { 
     "Rating": "5" 
     "Comment": "this is my third comment" 
    } 
      ]} 
} 
+0

Ты потрясающий! Благодаря! это действительно помогает визуализировать его. – TheDude

1

Вы говорите о том, как это применяется в MongoDB или в ODM, как Mongoose? Для MongoDB ответ прост: MongoDB не применяет схему. Вы можете иметь все три из следующих документов в коллекции MongoDB:

{ 
    "reviews" : { 
     "rating" : 9001, 
     "comment" : "nice scenery" 
    } 
} 

{ 
    "reviews" : [ 
     { 
      "rating" : [2, 4, 5], 
      "comment" : 19 
     }, 
     { 
      "rating" : -845, 
      "comment" : "Powerful stuff" 
     } 
    ] 
} 

{ 
    "reviews" : "no" 
} 

В ODM, который обеспечивает соблюдение на стороне приложения схемы, ваше обозначение ближе к чему-то, что будет означать каждый документ должен иметь один reviews поддокумент.

+0

Это имеет смысл. Я думал, что у MongoDB есть механик для обеспечения соблюдения схемы. Просто так я понимаю, что без ODM для обеспечения соблюдения схемы я могу просто вставить произвольное количество документов Review в документ пользователя прямо? – TheDude

+0

До предела на 16 МБ для документов в MongoDB, да. – wdberkeley

Смежные вопросы