![]() |
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 { |
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. |
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)
|
Jodå, det är absolut möjligt men vill helst "göra det rätt" :cool:
|
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 |
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.
|
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..
|
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.
|
Citat:
|
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