WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Lagra objekt i MongoDB (https://www.wn.se/forum/showthread.php?t=1052153)

jayzee 2012-02-07 15:25

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";
}


Kimpo 2012-02-08 17:50

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.

znap 2012-02-08 20:41

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)

jayzee 2012-02-08 21:11

Jodå, det är absolut möjligt men vill helst "göra det rätt" :cool:

znap 2012-02-08 23:49

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

Clarence 2012-02-09 14:19

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.

jayzee 2012-02-09 14:34

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..

Clarence 2012-02-09 14:52

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.

jayzee 2012-02-09 15:01

Citat:

Ursprungligen postat av Clarence (Inlägg 20432243)
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 :rolleyes:


Alla tider är GMT +2. Klockan är nu 11:35.

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