sql >> Databáze >  >> NoSQL >> MongoDB

Modelování many-to-many :through s Mongoid/MongoDB

Modelování dobrého schématu Mongodb skutečně závisí na tom, jak přistupujete ke svým datům. Ve vašem popsaném případě indexujete svůj klíč Members.user_id, který se zdá být v pořádku. Ale velikost vašeho dokumentu poroste, jak budete přidávat diváky, editory a správce. Vaše schéma také ztíží vytváření dotazů jako:

Projekty dotazů, kde user_id xxx je editor:

Opět možná nebudete muset dotazovat projekty, jako je tento, takže vaše schéma vypadá dobře. Pokud však potřebujete dotazovat své projekty podle role user_id AND, doporučil bych vám vytvořit kolekci 'project_membership':

db.project_memberships.insert(
  { 
    "project_id" : ObjectId("4d730fcfcedc351d67000032"),
    "editors" : [
      ObjectId("4d730fcfcedc351d67000002"),
      ObjectId("4d730fcfcedc351d67000004")
    ],
    "viewers" : [
      ObjectId("4d730fcfcedc351d67000002"),
      ObjectId("4d730fcfcedc351d67000004"),
      ObjectId("4d730fcfcedc351d67000001"),
      ObjectId("4d730fcfcedc351d67000005")
    ],
    "administrator" : [
      ObjectId("4d730fcfcedc351d67000011"),
      ObjectId("4d730fcfcedc351d67000012")
    ]
  }
)

db.project_memberships.ensureIndex({"editors": 1})
db.project_memberships.ensureIndex({"viewers": 1})
db.project_memberships.ensureIndex({"administrator": 1})

Nebo ještě jednodušší... přidejte index do schématu projektu:

db.projects.ensureIndex({"memberships.role": 1})



  1. Při vytváření prvního uživatele správce na clusteru mongdb se při chybovém hlášení nepodařilo přidat uživatele:správce nemá oprávnění provést příkaz

  2. Agregace Mongodb $group, omezte délku pole

  3. Definování schématu Mongoose za běhu z „popisu“ ve formátu JSON

  4. pozadí mongo createIndex blokuje shell