Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mongodb中使用ReflectionDBObject类插入java对象?_Java_Mongodb_Database - Fatal编程技术网

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

在mongodb中使用ReflectionDBObject类插入java对象?,java,mongodb,database,Java,Mongodb,Database,我试图将java中用户定义类的对象插入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 = ne

我试图将java中用户定义类的对象插入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 } }
我不知道有什么方法可以去除子文档中的
“\u id”:null
。这是ReflectionDBObject类的一个特征。子文档通常没有_id,但如果您希望子文档的_id为非null,可以将以下代码放入C()构造函数中:

public C()
{
    set_id(ObjectId.get());
}
这将产生如下对象:

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

最后,请注意属性“i”的
geti()
seti()
约定有点不寻常。JavaBeans规范说,您需要
getI()
setI()
方法来拥有属性“i”。但是,对于ReflectionDBObject类,MongoDB驱动程序不是这样工作的。

非常感谢Ian的帮助!!