如何在mongodb中插入对象

时间:2014-11-19 02:35:57

标签: mongodb

我有一个课程如下:

package mongo;

import com.mongodb.BasicDBObject;

public class tweet extends BasicDBObject{


private String name;
private Integer id;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
 }
 }

现在我尝试将此类的对象插入mongodb:

public void connect() throws UnknownHostException
{
        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
        DB db = mongoClient.getDB( "test" );
        tweet t=new tweet();
        t.setId(100);
        t.setName("Gggggg");
        DBCollection Collection = null ;
        Collection = db.getCollection("test");
        DBObject doc = new BasicDBObject();
        doc.put("first", t);
        Collection.save( doc);

        System.err.println(Collection.findOne());
}

但是当我运行此代码时,对象t没有插入数据库,而system.err.println返回以下内容:

{ "_id" : { "$oid" : "546c00efbadcd42088c8fee3"}}

如何将对象添加到mongodb?有可能吗?

2 个答案:

答案 0 :(得分:1)

BasicDBObject实际上是LinkedHashMap。因此,当您对其进行扩展时,您需要在put中执行retrievemap值。

因此,简单地将值设置为属性并不合理,这些属性需要放在Tweet地图中。

您需要修改Tweet类,如下所示:

class Tweet extends BasicDBObject{

public String getName() {
   return (String)this.get("name");
}

public void setName(String name) {
     this.put("name", name);
}

public Integer getId() {
    return (Integer)this.get("_id");
}

public void setId(Integer id) {
    this.put("_id", id);
 }
 }

和您的主要方法:

    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    DB db = mongoClient.getDB( "test" );
    Tweet t=new Tweet();
    t.setId(100);
    t.setName("Ghorbani");
    DBCollection collection = null ;
    collection = db.getCollection("test");
    collection.save(t);

    System.err.println(collection.findOne());

如果您注意到collection.save(t);,则会直接保存Tweet个对象。这就是它应该如何运作。

O / P:

{ "_id" : 100 , "name" : "Ghorbani"}

答案 1 :(得分:0)

您似乎正在尝试为对象设置ID。通常这是从Mongo自动完成的。尝试删除t.setId(100);,然后再次运行您的代码。

提示 - 尝试使用Mongoose来管理与Mongo的连接。