MongoDB:如何实现保存对象的PUT方法?

时间:2012-11-27 05:41:29

标签: java mongodb database

http://www.mongodb.org/display/DOCS/Java+-+Saving+Objects+Using+DBObject

此页面是关于在MongoDB中保存和检索对象的。但是在实现DBObject之后,我必须覆盖一堆方法。有谁知道如何实现PUT方法,以便“myTweet.put(”user“,userId);”可以工作吗?

1 个答案:

答案 0 :(得分:4)

而不是实施DBObject只是扩展BasicDBObject

class Tweet extends BasicDBObject {
  public Tweet() {
    super();
  }
  public Tweet(BasicDBObject base) {
    super();
    this.putAll(base);
  }
}

Tweet myTweet = new Tweet();
myTweet.put("user", userId);

BasicDBObject实现DBObject所以扩展它的类可以传递给任何需要实现DBObject的类的函数。如果你想实现接口,你必须提供一些容器类来存储tweet属性BasicDBObject通过扩展另一个名为BasicBSONObject的类来实现这一点,你可以在source中看到,一个简单的实现看起来像这样:

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.bson.BSONObject;

import com.mongodb.DBObject;


public class Tweet implements DBObject {
    private Map<String, Object> data;
    private boolean partial;

    public Tweet() {
        data = new HashMap<>();
        partial = false;
    }

    @Override
    public Object put(String key, Object value) {
        return data.put(key, value);
    }

    @SuppressWarnings("unchecked")
    @Override
    public void putAll(BSONObject o) {
        data.putAll(o.toMap());
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public void putAll(Map m) {
        data.putAll(m);
    }

    @Override
    public Object get(String key) {
        return data.get(key);
    }

    @SuppressWarnings("rawtypes")
    @Override
    public Map toMap() {
        return data;
    }

    @Override
    public Object removeField(String key) {
        return data.remove(key);
    }

    @Override
    public boolean containsKey(String key) {
        return data.containsKey(key);
    }

    @Override
    public boolean containsField(String key) {
        return data.containsKey(key);
    }

    @Override
    public Set<String> keySet() {
        return data.keySet();
    }

    @Override
    public void markAsPartialObject() {
        partial = true;
    }

    @Override
    public boolean isPartialObject() {
        return partial;
    }
}

此类实现DBObject并使用HashMap存储它的属性。