我有一个课程如下:
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?有可能吗?
答案 0 :(得分:1)
BasicDBObject
实际上是LinkedHashMap
。因此,当您对其进行扩展时,您需要在put
中执行retrieve
和map
值。
因此,简单地将值设置为属性并不合理,这些属性需要放在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的连接。