| repository | repository := VOMongoRepository host: 'localhost' database: 'demo'. repository enableSingleton.
| repository | repository := VOMemoryRepository new. repository enableSingleton.
Object subclass: #Hero instanceVariableNames: 'name level powers' classVariableNames: '' package: 'SuperHeroes' Hero >> name ^ name Hero >> name: aString name := aString Hero >> level ^ level Hero >> level: anObject level := anObject Hero >> powers ^ powers ifNil: [ powers := Set new ] Hero >> addPower: aPower self powers add: aPower
Object subclass: #Power instanceVariableNames: 'name' classVariableNames: '' package: 'SuperHeroes'. Power>>name ^ name Power>>name: aString name := aString
isVoyageRoot
Hero class >> isVoyageRoot ^ true
Hero new name: 'Spiderman'; level: #epic; addPower: (Power new name: 'Super-strength'); addPower: (Power new name: 'Wall-climbing'); addPower: (Power new name: 'Spider instinct'); save. Hero new name: 'Wolverine'; level: #epic; addPower: (Power new name: 'Regeneration'); addPower: (Power new name: 'Adamantium claws'); save.
> db.Hero.find()[0] { "_id" : ObjectId("d847065c56d0ad09b4000001"), "#version" : 688076276, "#instanceOf" : "Hero", "level" : "epic", "name" : "Spiderman", "powers" : [ { "#instanceOf" : "Power", "name" : "Spider instinct" }, { "#instanceOf" : "Power", "name" : "Super-strength" }, { "#instanceOf" : "Power", "name" : "Wall-climbing" } ] }
Hero selectAll. > an OrderedCollection(a Hero, a Hero)
Hero selectOne: [ :each | each name = 'Spiderman' ]. > a Hero
Hero selectMany: [ :each | each level = #epic ]. > an OrderedCollection(a Hero, a Hero)
Hero selectOne: { #name -> 'Spiderman' } asDictionary. > a Hero
Hero selectMany: { #level -> #epic } asDictionary. > an OrderedCollection(a Hero, a Hero)
Hero selectMany: { #level -> #epic } asDictionary sortBy: { #name -> VOOrder ascending } limit: 10 offset: 0. > an OrderedCollection(a Hero, a Hero)
Hero count. > 2
Hero count: [ :each | each name = 'Spiderman' ] > 1.
Hero removeAll. "Beware of this!" > Hero class
hero := Hero selectAll anyOne. hero remove. > a Hero
Power class >> isVoyageRoot ^ true
Power new name: 'Fly'; save. Power new name: 'Super-strength'; save.
fly := Power selectOne: [ :each | each name = 'Fly']. superStrength := Power selectOne: [ :each | each name = 'Super-strength']. Hero new name: 'Superman'; level: #epic; addPower: fly; addPower: superStrength; save.
Reset repository when changing the schema
VORepository current reset.
> db.Hero.find()[0] { "_id" : ObjectId("d8474983421aa909b4000008"), "#version" : NumberLong("3874503784"), "#instanceOf" : "Hero", "level" : "epic", "name" : "Superman", "powers" : [ { "#collection" : "Power", "#instanceOf" : "Power", "__id" : ObjectId("d84745dd421aa909b4000005") }, { "#collection" : "Power", "#instanceOf" : "Power", "__id" : ObjectId("d84745dd421aa909b4000006") } ] }
/