ASP.NET Core中MongoDB双字段等值校验的更新实现咨询
实现MongoDB双字段校验的更新操作
嗨,我来帮你调整这段代码,实现同时校验transactionId(对应文档_id)和drLedgerId(对应文档ledgerId)的需求~
你只需要在过滤条件里同时添加两个字段的匹配规则就行,MongoDB Driver提供了两种常用的组合方式,都能满足你的需求:
方式1:用&运算符简洁组合条件
这种写法适合简单的多条件场景,代码更紧凑:
public long DebitLedgerBalance(string drLedgerId, string transactionId, decimal amount, string userID) { // 组合双条件:_id等于transactionId 且 ledgerId等于drLedgerId var filter = Builders<Transaction>.Filter.Eq(x => x._id, transactionId) & Builders<Transaction>.Filter.Eq(x => x.ledgerId, drLedgerId); UpdateDefinition<Transaction> update = Builders<Transaction>.Update .Inc(x => x.debitLedgerBalance, amount * -1); // 使用组合后的过滤条件执行更新 return db.Transaction.UpdateOne(filter, update).ModifiedCount; }
方式2:用And方法组合条件
如果后续需要扩展更多过滤规则,这种方式的可读性更强,便于维护:
public long DebitLedgerBalance(string drLedgerId, string transactionId, decimal amount, string userID) { // 分别定义两个单字段过滤条件 var idFilter = Builders<Transaction>.Filter.Eq(x => x._id, transactionId); var ledgerFilter = Builders<Transaction>.Filter.Eq(x => x.ledgerId, drLedgerId); // 用And方法组合所有需要的条件 var filter = Builders<Transaction>.Filter.And(idFilter, ledgerFilter); UpdateDefinition<Transaction> update = Builders<Transaction>.Update .Inc(x => x.debitLedgerBalance, amount * -1); return db.Transaction.UpdateOne(filter, update).ModifiedCount; }
效果说明
修改后,只有当MongoDB中存在同时满足_id = transactionId和ledgerId = drLedgerId的Transaction文档时,才会执行debitLedgerBalance的递减操作(amount * -1),最终返回实际被修改的文档数量。
内容的提问来源于stack exchange,提问作者Bhavin Varsur
相关产品推荐
相关产品推荐

