Kom ihåg mig?

Lagra objekt i MongoDB

Ämnesverktyg Visningsalternativ
Oläst 2012-02-07, 15:25 #1
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Standard Lagra objekt i MongoDB

Hej,

som de flesta av er redan vet är mongoDB en dokumentdatabas som kan lagra objekt utan problem (i BSON format).

Problemet som jag har är att efter att ha sparat ner ett objekt och hämtar sedan ut den i min PHP kod med findOne(...) så är alla referenser till andra objekt helt borta och utbytta med arrayer. Går det på något sätt att behålla dessa?

Tex. så blir "foo" i klassen "test" i mitt exempel till array:
Kod:
class test {
  public $foo;

  public function __construct()
  {
    $foo = new SomeClass;
  }
}

class SomeClass {
  public $a = "hejsan";
  public $b = "lilla";
}

Senast redigerad av jayzee den 2012-02-07 klockan 15:35
jayzee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-08, 17:50 #2
Kimpo Kimpo är inte uppkopplad
Medlem
 
Reg.datum: Mar 2009
Inlägg: 185
Kimpo Kimpo är inte uppkopplad
Medlem
 
Reg.datum: Mar 2009
Inlägg: 185
Kan inte php så bra men jag jobbar med mongodb i .net.

det finns en klass med 3 statiska metoder för att jobba med dbreferenser om jag inte minns fel.

$refereradeobjektet = MongoDBRef::get($dincollection->db, $dittförstaobjekt['namnpåreferenstypen']);

Nåt i den stilen

Refererade objekt följer inte med automatiskt vid hämtning av ett dokument , endast embeddade dokument gör det. Alla referenser måste hämtas i efterhand.

Senast redigerad av Kimpo den 2012-02-08 klockan 17:54
Kimpo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-08, 20:41 #3
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
Kanske vore mindre omständigt att spara objektet som en serialiserad sträng? (Jag har aldrig fått tillfälle att jobba med mongodb så kan mycket väl ha fel)
znap är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-08, 21:11 #4
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Jodå, det är absolut möjligt men vill helst "göra det rätt"
jayzee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-08, 23:49 #5
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
Jag blir något konfunderad när du säger att du kan spara och hämta klasser. Jag hittar inte någonstans att man kan spara något annat än associativa arrayer?

Du är säker på att du inte sparar en klass med publika variabler? Som då förmodligen castas till en array när du sparar det som ett mongodb-dokument? Du får gärna dela med dig av något kodexempel.

Det kimpo skriver om är en länk mellan dokument som tillhör olika kollektioner i databasen (http://www.php.net/manual/en/class.mongodbref.php). Men jag får känslan av det är något annat du är ute efter.

Vad som är "rätt" eller "fel" beror väl på din design. Om det handlar om att byta ut implementationen av ett databas-interface så antar jag att du bör tänka på samma sätt som när du har en vanlig SQL-databas. Att du har tabeller (kollektioner i mongo) med rader som har kolumner (den associativa arrayen). Om du däremot bara vill spara ett objekt någonstans så kanske det rätta vore att spara det som ett serialiserat objekt.

/ vic
znap är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-09, 14:19 #6
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Såvitt jag vet kan man inte göra det du försöker göra utan att använda PHPs serialisering, och då är frågan varför man använder en dokument-databas. Det finns dock ramverk som löser ihop-plåstringen åt dig, se till exempel doctrine med mongodb odm - riktigt smidigt.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-09, 14:34 #7
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Usch, hemska tanke att använda ORM till sådant.. Nåja, jag löste det genom att lagra data i array form i klasser i fråga istället - då är datat exakt i samma form innan och efter..
jayzee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-09, 14:52 #8
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Utan en relations-databas finns ingen ORM Du får det så smidigt som möjligt med väldigt mycket overhead med en ODM, så ja om det är en hemsk tanke beror helt på projektet skulle jag säga.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-09, 15:01 #9
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Citat:
Ursprungligen postat av Clarence Visa inlägg
Du får det så smidigt som möjligt med väldigt mycket overhead med en ODM
Exakt, eftersom jag är ett optimeringsfreak anpassar jag istället klasstrukturen
jayzee är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:18.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017