我在表格中输入这些文件:
db.RoomUsers.insert( {userId: 1, roomId: 1} )
db.RoomUsers.insert( {userId: 2, roomId: 1} )
db.RoomUsers.insert( {userId: 3, roomId: 1} )
db.RoomUsers.insert( {userId: 4, roomId: 1} )
现在,我的应用程序要求在RoomUsers中每个房间的用户数量有限。假设每个房间的用户数不能超过5个。 如何解决?
如果我使用RDBM,我可能会有这个策略(我不确定它是最好的,但仍然):
1 - Count number of entries in RoomUsers where roomId = X
2 - If number of users is less than Y then:
2A - Start a transaction
2B - Insert new user in RoomUsers
2C - Count number of entries in RoomUsers where roomId = X
2D - If number of users is greater than Y then: Rollback. Otherwise: commit
MongoDB实际上没有交易,我的理解。如何在noSql中完成同样的事情?
答案 0 :(得分:2)
有一种方法可以让你以原子方式进行。
您应该将userIds
嵌入RoomUsers
集合中。像
{ "userIds" : [ 1, 2, 3, 4 ], "roomId" : 1 }
现在您可以使用以下更新查询。
db.RoomUsers.update( { roomId : 1, "userIds": { $not: {$size: 5 } } }, { $push : { "userIds":5 } } )