在mongodb中限制插入

时间:2017-04-06 07:38:08

标签: mongodb

我在表格中输入这些文件:

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中完成同样的事情?

1 个答案:

答案 0 :(得分:2)

有一种方法可以让你以原子方式进行。

您应该将userIds嵌入RoomUsers集合中。像

这样的东西

{ "userIds" : [ 1, 2, 3, 4 ], "roomId" : 1 }

现在您可以使用以下更新查询。

db.RoomUsers.update( { roomId : 1, "userIds": { $not: {$size: 5 } } }, { $push : { "userIds":5 } } )