Som sett i det siste kapitlet i MongoDB relasjoner, for å gjennomføre en normalisert database struktur i MongoDB vi bruker begrepet Refererte Relasjoner
også referert til som Manuelle Referanser
der vi manuelt lagre id dokumentet refereres er inne annet dokument. Men i tilfeller hvor et dokument inneholder referanser fra forskjellige samlinger, kan vi bruke MongoDB DBRefs
.
DBRefs vs Manuelle Referanser
Som et eksempel scenario hvor vi ville bruke DBRefs stedet for Manuell referanser, mener en database der vi lagrer ulike typer adresser (hjemme, på kontoret, mailing, etc) i forskjellige samlinger (address_home, address_office, address_mailing, etc). Nå, når en bruker
samlingens dokumentet refererer til en adresse, må det også spesifisere hvilke samling for å se nærmere på grunnlag av adressetype. I slike scenarier der en dokumentreferanser dokumenter fra mange samlinger, bør vi bruke DBRefs.
Bruke DBRefs
Det er tre felt i DBRefs:
$ ref:
dette feltet angis samling av det refererte dokumentet
$ id:
dette feltet angis _id felt av det refererte dokumentet
$ db:
Dette er et valgfritt felt og inneholder navnet på databasen som det refereres Dokumentet ligger
Tenk et eksempel bruker dokument med DBRef feltet adressere
som vist nedenfor: product: {"_id": objectID ("53402597d852426020000002"), "adresse": {"$ ref ":" address_home "," $ id ": objectID (" 534009e4d852427820000002 ")," $ db ":" tutorialspoint "}," kontakt ":" 987 654 321 "," dob ":" 01-01-1991 "," name ":" Tom Benzamin "}
adresse
DBRef feltet spesifiserer at det refererte adresse dokumentet ligger i address_home
samling under tutorialspoint
database og har en id av 534009e4d852427820000002.
Følgende kode dynamisk ser i samlingen spesifisert av $ ref
parameter ( address_home
i vårt tilfelle) for et dokument med id som angitt av $ id
parameter i DBRef.
> Var user = db.users.findOne ({"name": "Tom Benzamin"})> Var dbRef = user.address> db [dbRef $ ref.] .findOne ({"_ id" :( dbRef. $ id)})
Koden ovenfor returnerer følgende adresse dokumentet stede i address_home
samling: product: {"_id": objectID ("534009e4d852427820000002"), "bygge": "22 A, Indiana Apt "," pinkode ": 123456," by ":" Los Angeles "," state ":" California "}