【问题标题】:How can I get only the objectId of document in mongodb using java如何使用java仅获取mongodb中文档的objectId
【发布时间】:2017-04-18 14:14:42
【问题描述】:

我只想从 mongodb 中获取匹配条件的 objectId。我可以使用 dbobject 和 cursor 方法获取它。但是我在这里使用了 mongo 客户端,不知道该怎么做。 谢谢你

    MongoClient client = new MongoClient("localhost", 27017);
    MongoDatabase database = client.getDatabase("baazaronline");
    MongoCollection<Document> collection = database
            .getCollection("Attribute");

    Bson filter = new Document("attcode", attcode);

    Bson newValue = new Document("DefautV", DefautV).append("IVSO", IVSO).append("UniqueV", UniqueV).append("ValuesR", ValuesR).append("Visiblename", Visiblename).append("citso", citso).append("values",values);
    Bson updateOperationDocument = new Document("$set", newValue);
    collection.updateOne(filter, updateOperationDocument);

    client.close();

【问题讨论】:

    标签: java mongodb mongodb-java


    【解决方案1】:

    使用findOneAndUpdate,它返回Document作为结果并映射_id

    类似

    ObjectId id = collection.findOneAndUpdate(filter, updateOperationDocument).get("_id", ObjectId.class);
    

    更新:包含 Projection 以将响应限制为仅包含 _id 字段。

    FindOneAndUpdateOptions findOneAndUpdateOptions = new FindOneAndUpdateOptions();
    findOneAndUpdateOptions.projection(Projections.include("_id"));
    ObjectId id  =  collection.findOneAndUpdate(filter, updateOperationDocument, findOneAndUpdateOptions).getObjectId("_id");
    

    【讨论】:

    • 谢谢,你的回答很有帮助。但我只想从这个文档中获取 id,不想使用 id 来更新文档。
    • 不客气。你不是。是什么让你这么说?
    • 我想在JUnit测试中使用它,我该怎么做?使用过滤器、updateOperationDocument 等作为参数,因为它会抱怨。
    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多