2016-08-10 3 views
0

Я хотел бы скопировать существующий документ и предоставить ему новый идентификатор объекта, а затем обновить поле недавно добавленного документа.как скопировать документ mongodb, а затем обновить значение поля

В настоящее время я использую «найти» для получения коллекции документов и итерации списка, а затем используйте insertOne и updateOne, чтобы вставить новый документ и обновить значение поля. Но похоже, что значение поля, которое обновляется, принадлежит документу со старым идентификатором объекта. И я хочу, чтобы значение поля принадлежало документу с новым обновлением 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); 
} 

ответ

0

Почему бы вам не изменить свой новый документ перед вставкой?

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); 
} 
+0

Я следую за ваш пример кода, но я м не в состоянии видеть новый документ вставлены. Я выполнил трассировку отладки, чтобы проверить некоторые значения для currentDocument и newDocument. И я вижу, что у меня есть правильные данные из System.out.println из newDocument и currentDocument, но документ просто не вставлен в dtabase. – bbq123

+0

Какой из примеров вы использовали? Если сначала: затем попробуйте очистить значение _id. 'doc.put (" _ id ", null);' или 'doc.remove (" _ id ");' – shure