MongoDBはスキーマレスなので、 RDBのようにデータモデルがガチガチに固まったデータベースとは違った新しい使い方ができそう。 スキーマレスということは、ORマッパーとか、静的型付け言語とは、 "ソリが合わない"んだろうなとは予想できる。
・・・が、Java-RDBで開発したことのある方なら、 ORマッパー的な使い方があったらとっつきやすいと思う。
そんなわけで、JavaでMorphia経由でCRUD的なことをする場合のメモ
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mongodbsample</groupId>
<artifactId>mongodbsample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.github.jmkgreen.morphia</groupId>
<artifactId>morphia</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
@Entity
public class Person {
@Id public ObjectId oid;
public long personid;
public String name;
}
Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
Person p = new Person();
p.personid = 12;
p.name = "ff";
ds.save(p);
> show dbs
local (empty)
myDB 0.0625GB
test (empty)
> use myDB
switched to db myDB
> db.Person.find();
{ "_id" : ObjectId("5090879e447d565970f2bd7f"), "className" : "model.Person", "personid" : NumberLong(12), "name" : "ff" }
※Morphiaで追加すると必ず"className"フィールドができて、エンティティクラス名が設定される模様。
Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
Query<Person> persons = ds.find(Person.class);
for (Person person : persons.asList()) {
System.out.println("oid :" + person.oid);
System.out.println("personid :" + person.personid);
System.out.println("name :" + person.name);
}
oid :5090879e447d565970f2bd7f
personid :12
name :ff
oid :509090f4447db79527a4341a
personid :13
name :fff
Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
Query<Person> persons = ds.find(Person.class);
for (Person person : persons.asList()) {
person.name = person.name + "_1";
}
ds.save(querys);
> db.Person.find();
{ "_id" : ObjectId("5090879e447d565970f2bd7f"), "className" : "model.Person", "personid" : NumberLong(12), "name" : "ff_1" }
{ "_id" : ObjectId("509090f4447db79527a4341a"), "className" : "model.Person", "personid" : NumberLong(13), "name" : "fff_1" }
>
Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
Query<Person> persons = ds.find(Person.class);
ds.delete(persons);
> db.Person.count()
0
>