繁体   English   中英

在mongodb中使用ReflectionDBObject类插入java对象?

[英]Inserting an java object using ReflectionDBObject class in mongodb?

我试图将用户定义的类的对象插入到mongodb集合中。

我的班级是这样的:

class C extends ReflectionDBObject
{
    int i;
    C(){}
}

并且插入的代码是

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);

但是在插入时,对象由数据库中的空值表示。 我做错了什么?我不想使用gson或morphia。

Java驱动程序在ReflectionDBObject类上使用getter和setter方法(而不是变量)来确定要包含在文档中的属性。

因此,您的代码应该是:

public class C extends ReflectionDBObject
{
    int i;

    public int geti()
    {
        return i;
    }

    public void seti(int i)
    {
        this.i = i;
    }
}

这将导致集合中的对象如下:

{ "_id" : ObjectId("504567d903641896aa40bde6"), "a" : { "_id" : null, "i" : 1 } }

我不知道在子文档中删除"_id" : null的方法。 这是ReflectionDBObject类的一个特征。 子文档通常不具有_ids,但如果您想要子文档的非null _id,则可以将以下代码放在C()构造函数中:

public C()
{
    set_id(ObjectId.get());
}

这将导致如下对象:

{ 
  "_id" : ObjectId("504568ff0364c2a4a975b375"), 
  "a" : { "_id" : ObjectId("504568ff0364c2a4a975b374"), "i" : 1 } 
}

最后,请注意属性“i”的geti()seti()约定略有异常。 JavaBeans规范说你需要getI()setI()方法来获得属性“i”。 但是,MongoDB驱动程序对于ReflectionDBObject类不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM