使用带有MongoDB jdbc的ObjectID进行搜索

时间:2018-01-02 17:12:20

标签: java mongodb jdbc

我有一个Pojo对象,我在其上存储从Mongo检索到的ObjectID。 当我打印它时,我可以看到:

Object: { "_id" : { "$oid" : "5a4b939225c218fbe107199c" }, "organizationId" : "ORGANIZATION_ID", "organizationName" : "Organization name", "storeIds" : [] }

我现在想要使用ObjectID进行搜索,我正在使用它:

public String find(String dbId, String collection, ObjectId id) throws Exception {
    BasicDBObject query = new BasicDBObject();
    query.put("_id", id);
    FindIterable<Document> search = collection.find(query);
}

问题是搜索始终为空。如何使用ObjectID进行搜索?有没有办法不提取oid并以这种方式创建查询?

query.put("_id", new ObjectId(oid));

2 个答案:

答案 0 :(得分:0)

试试,

import org.bson.types.ObjectId;

public DBObject findDocumentById(String id) {

    BasicDBObject query = new BasicDBObject();
    query.put("_id", new ObjectId(id));

    DBObject dbObj = collection.findOne(query);
    return dbObj;
}

您可以找到一个或所有类似的对象ID。

答案 1 :(得分:0)

首先,当我填充Pojo并且ObjectID填充了从MongoDB检索到的值时,会创建一个新对象,因此它将与检索到的对象不同。

我所做的是创建一个新的DataType,添加这两个类:

public class MongoOID {

    @SerializedName("$oid")
    private String oid;

    public String getOid() {
        return oid;
    }

    public void setOid(String oid) {
        this.oid = oid;
    }
}

public class MongoId {

    @SerializedName("_id")
    private MongoOID _id;

    /**
     * http://www.baeldung.com/migrating-to-java-8-date-time-api
     */
    private LocalDateTime created;

    /**
     * http://www.baeldung.com/migrating-to-java-8-date-time-api
     */
    private LocalDateTime updated;

    //region Getter and Setter
    public MongoOID get_id() {
        return _id;
    }

    public void set_id(MongoOID _id) {
        this._id = _id;
    }

    public LocalDateTime getCreated() {
        return created;
    }

    public void setCreated(LocalDateTime created) {
        this.created = created;
    }

    public LocalDateTime getUpdated() {
        return updated;
    }

    public void setUpdated(LocalDateTime updated) {
        this.updated = updated;
    }
    //endregion
}

所以,在我的Pojo上,我用MongoID _id替换了ObjectId _id,我能够读取正确的ID。 当我使用此ID查询mongo时,我只是使用它:

BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId(id));

其中id是一个String,它是:

organization.get_id().getOid()

我不确定这是更好的方式(也可能是正确的)但是它有效。不幸的是,我没有创建时间戳,所以我不得不在我的文档中添加两个键(创建和更新)。