Arp*_*nki 5 java database mongodb
我试图将用户定义的类的对象插入到mongodb集合中.
我的班级是这样的:
class C extends ReflectionDBObject
{
int i;
C(){}
}
Run Code Online (Sandbox Code Playgroud)
并且插入的代码是
Mongo m = new Mongo("localhost");
com.mongodb.DB appdb = m.getDB("appdb");
DBCollection cmpcol = appdb.getCollection("feed");
DBObject bdbo = new BasicDBObject();
C c = new C();
c.i = 1;
bdbo.put("a",c);
cmpcol.insert(bdbo);
Run Code Online (Sandbox Code Playgroud)
但是在插入时,对象由数据库中的空值表示.我做错了什么?我不想使用gson或morphia.
Ian*_*iel 13
Java驱动程序在ReflectionDBObject类上使用getter和setter方法(而不是变量)来确定要包含在文档中的属性.
因此,您的代码应该是:
public class C extends ReflectionDBObject
{
int i;
public int geti()
{
return i;
}
public void seti(int i)
{
this.i = i;
}
}
Run Code Online (Sandbox Code Playgroud)
这将导致集合中的对象如下:
{ "_id" : ObjectId("504567d903641896aa40bde6"), "a" : { "_id" : null, "i" : 1 } }
Run Code Online (Sandbox Code Playgroud)
我不知道摆脱"_id" : null子文件的方法.这是ReflectionDBObject类的一个特征.子文档通常不具有_ids,但如果您想要子文档的非null _id,则可以将以下代码放在C()构造函数中:
public C()
{
set_id(ObjectId.get());
}
Run Code Online (Sandbox Code Playgroud)
这将导致如下对象:
{
"_id" : ObjectId("504568ff0364c2a4a975b375"),
"a" : { "_id" : ObjectId("504568ff0364c2a4a975b374"), "i" : 1 }
}
Run Code Online (Sandbox Code Playgroud)
最后,需要注意的是,geti()和seti()约定财产"i"是有点不同寻常.JavaBeans规范说你需要getI()和setI()方法来拥有属性"i".但是,MongoDB驱动程序对于ReflectionDBObject类不起作用.