Per il tuo primo problema MongoDB ha upsert così
db.collection.update(
{query for id},
{document},
{upsert: true}
)
o nel driver Java
yourCollection.update(searchObject, modifiedObject, true, false);
Se vuoi impostare un ID personalizzato devi semplicemente impostare il _id
chiave manualmente cioè
yourBasicDBObject.put("_id",yourCustomId)
devi solo assicurarti che sia unico per ogni documento.
Dovrai anche impostare il _id
nel tuo modifiedObject
in caso contrario ne verrà generato uno nuovo.
Per quanto riguarda le operazioni in blocco , semplicemente impostando un ID personalizzato per ogni documento fornendo il _id
anche la chiave dovrebbe funzionare.