| 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
class methodHero 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")
}
]
}
/