【问题标题】:how to copy mongodb document and then update the value of a field如何复制mongodb文档然后更新字段的值
【发布时间】:2016-08-15 18:20:00
【问题描述】:

我想复制一个现有的文档并给它一个新的objectID,然后更新新添加的文档的一个字段。

目前,我正在使用“查找”来获取文档集合,并迭代列表,然后使用 insertOne 和 updateOne 插入新文档并更新字段值。但似乎更新的字段值属于具有旧对象 id 的文档。我希望字段值属于具有新 ObjectID 的文档得到更新。

myDocList = collection.find(new Document("track", trackName));  

for (Document document : myDocList) {
    collection.insertOne(new Document(document));
    collection.updateOne(new Document("track", trackName), new Document("$set", new Document("track", newTrackName)));
     System.out.println(document);
}

【问题讨论】:

    标签: java mongodb clone


    【解决方案1】:

    为什么不在插入之前更改新文档?

    for (Document document : myDocList) {
        Document doc = new Document(document);
        doc.setTrackName(newTrackName); // or doc.put("track", newTrackName); if your doc implements Map
        collection.insertOne(doc);
        System.out.println(document);
    }
    

    当然,updateOne 方法将使用该 trackName 更新第一个找到的记录。 如果您需要保存逻辑,则需要以某种方式保存插入的新文档的 objectId。然后通过objectId调用更新对象。 比如:

    for (Document document : myDocList) {
        collection.insertOne(new Document(document)).getObjectId(); //save this value
        //I don't know exactly which mongo driver do you use
        collection.updateOne(new Document("_id", savedObjId), new Document("$set", new Document("track", newTrackName)));
         System.out.println(document);
    }
    

    【讨论】:

    • 我按照您的代码示例进行操作,但看不到新文档已插入。我已经实现了调试跟踪来检查 currentDocument 和 newDocument 的一些值。而且我可以看到我从 newDocument 和 currentDocument 的 System.out.println 中获得了正确的数据,但是该文档没有被插入到数据库中。
    • 您使用了哪些示例?如果首先:然后尝试清除 _id 值。 doc.put("_id", null);doc.remove("_id");
    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 2023-03-15
    • 1970-01-01
    • 2021-06-24
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多