MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB - трябва ли моят потребителски документ да съдържа списък с идентификатори на проекти?

user може да има много projects (и един проект е свързан само с един потребител). Това е едно към много връзка.


Всеки user трябва да съхранява списъка с неговите/нейните projects . Например:

user:
    id: <some value>,
    name: <some value>,
    email: <some value>,
    projects: [
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
         ...
    ]

Имайте предвид, че всеки project е поддокумент (обект или вграден документ) в рамките на projects масив. project има своите свързани подробности като projectId , projectName и т.н.


Мисля, че трябва да има само една колекция наричан като user_projects . Ако приемем, че:(i) user може да има от 0 до 100 проекта и (ii) project подробностите на не са твърде големи.

Това е модел на вграждане на страната „много“ на връзката 1 към N в страната „едно“. Това е препоръчителен начин за денормализиране на данните. Това има предимството на ефективни и бързи заявки. Това опростява транзакциите, тъй като записите (вмъквания, актуализирания и изтривания) ще бъдат атомарни с една операция към документ в рамките на същата колекция.


Ще използвате user id или name (с уникален индекс), за да извлечете документ и това ще бъде много бърза заявка. Можете да имате индекс на projects масив (индексите на полетата на масива се наричат ​​Индекси с множество ключове ) - на полетата на проекта. Например, индексирайте по projectId или/и projectName има смисъл.

Можете да получите всички проекти за потребител - това е проста заявка с помощта на user id / name . Заявка проекция позволява каква информация е свързана с project се показва. Можете да използвате find или aggregate метод за изграждане на заявката. Можете да направите заявка за конкретен project за user , използвайки projectId или projectName . Тъй като има индекси на user и project полета, това ще бъде ефективна заявка.

Така че моята препоръка е да имате една колекция, user_projects , с user информацията на и projects информация, вградена в него.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да комбинирате използването на оператора all и icontains за mongoengine

  2. Удостоверяване с Spring Security и MongoDB

  3. Как да заявите дата на mongodb с помощта на php

  4. Flask mongoengine се свързва чрез uri

  5. Mongodb сървърът не се стартира след промяна на dbpath