Data Writes
Use dbVisitor to insert, update, and delete data with MongoDB commands. See Query Operations for queries and entity mapping.
Executing Write Commands
JdbcTemplate jdbc = new JdbcTemplate(dataSource);
jdbc.executeUpdate(
"test.user_info.insertOne({uid: ?, name: ?})",
new Object[] { "1001", "mali" });
jdbc.executeUpdate(
"test.user_info.updateMany({uid: ?}, {$set: {name: ?}})",
new Object[] { "1001", "new name" });
jdbc.executeUpdate(
"test.user_info.deleteMany({uid: ?})",
new Object[] { "1001" });
Updating Through Different APIs
These examples reuse the entity mapping from Query Operations and change the selected record's name to new name.
- Builder API
- Method Annotations
- Mapper File
LambdaTemplate lambda = new LambdaTemplate(dataSource);
int changed = lambda.update(UserInfo.class)
.eq(UserInfo::getUid, "1001")
.updateTo(UserInfo::getName, "new name")
.doUpdate();
@SimpleMapper
public interface UserInfoWriteMapper {
@Update("test.user_info.updateMany({uid: #{uid}}, {$set: {name: #{name}}})")
int rename(@Param("uid") String uid, @Param("name") String name);
}
<mapper namespace="com.example.UserInfoWriteMapper">
<update id="rename">
test.user_info.updateMany({uid: #{uid}}, {$set: {name: #{name}}})
</update>
</mapper>
@RefMapper("/mapper/mongo-write.xml")
public interface UserInfoWriteMapper {
int rename(@Param("uid") String uid, @Param("name") String name);
}
Save the XML at /mapper/mongo-write.xml; the interface belongs to com.example.
Session session = new Configuration().newSession(dataSource);
UserInfoWriteMapper mapper = session.createMapper(UserInfoWriteMapper.class);
int changed = mapper.rename("1001", "new name");
Database Write Operations
| Operation | Database action |
|---|---|
| Update selected properties | updateMany + $set |
| Delete matching records | deleteMany |
BaseMapper updates and deletes use the same operations.
Insert Conflicts
LambdaTemplate lambda = new LambdaTemplate(dataSource);
lambda.insert(UserInfo.class)
.onDuplicateStrategy(DuplicateKeyStrategy.Update)
.applyEntity(user)
.executeSumResult();
Ignore matches mapped primary keys and keeps an existing document or inserts a new one. Update changes only the supplied non-key fields of an existing document or inserts a new one. Both use native MongoDB upsert, without a preliminary query.
Supply every mapped primary key and create a unique index for those fields; primary=true does not create it. Conflicts on other unique fields still fail. Generated keys are returned only for newly inserted documents.
Update Counts and Errors
Updates return the number of documents actually changed. If 3 documents match and 1 already has the requested value, the returned count is 2, not 3. An upsert that inserts a document returns 1.
Invalid commands and duplicate _id values report errors. Updates or deletes by business fields may affect all matches. See Query Errors for queries on missing collections.
Multiple Writes and Transactions
Multiple commands do not automatically form a transaction; completed writes are not guaranteed to roll back after a failure. See Transaction Support for transaction APIs, propagation, and isolation.