【问题标题】:MongoDB: How to implement a PUT method for saving Objects?MongoDB:如何实现保存对象的 PUT 方法?
【发布时间】:2012-11-27 05:41:28
【问题描述】:

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

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

【问题讨论】:

    标签: java mongodb database


    【解决方案1】:

    不用实现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 的类的函数。如果你想实现这个接口,你必须提供一些容器类来存储推文属性 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 来存储它的属性。

    【讨论】:

    • 但是,我从 BasicDBObject 扩展,你将无法做到:Tweet myTweet = (Tweet)collection.findOne();
    • 答案并没有解决他如何实现接口的问题
    • 添加了一个简单的实现。
    猜你喜欢
    • 2016-02-19
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多