2014-11-19 5 views
0

У меня есть класс следующим образом:как вставить объект в 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()); 
} 

, но когда я запускаю этот код объект т не вставлена ​​в БД и возвращать System.err.println следующее:

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

Как добавить объект в mongodb? можно ли это сделать?

ответ

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 объект быть сохранены непосредственно. Так оно и должно работать.

о/р:

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

Возможно, вы пытаетесь установить ID для своего объекта. Обычно это то, что делается автоматически из Монго. Попробуйте удалить t.setId(100);, а затем снова запустите свой код.

Совет. Попробуйте использовать Mongoose для управления вашим соединением с Mongo.

+0

Привет, на самом деле, что идентификатор что-то другое, и мне нужно, чтобы вставить его, но даже если я удалю SETID та же проблема существует –

Смежные вопросы