За първия ви проблем MongoDB има upsert така че
db.collection.update(
{query for id},
{document},
{upsert: true}
)
или в драйвера на Java
yourCollection.update(searchObject, modifiedObject, true, false);
Ако искате да зададете персонализиран идентификатор, просто задайте _id
въведете ръчно, т.е.
yourBasicDBObject.put("_id",yourCustomId)
просто трябва да се уверите, че е уникален за всеки документ.
Ще трябва също да зададете _id
във вашия modifiedObject
в противен случай ще бъде генериран нов.
Що се отнася до груповите операции , като просто зададете персонализиран идентификатор за всеки документ, като дадете _id
ключът също трябва да работи.