我有一个集合,说" resource.pool",它模拟资源池。
有2种资源状态:
1.免费,这意味着我们可以通过将其标志设置为OCCUPIED来获取此资源(使用findAndModify)
2. OCCUPIED,表示资源已被另一个进程占用。但如果它处于OCCUPIED状态太长时间,我们可以通过检查是否currentTime - lastFreeTime >= expiredAge
来获取它。
为了获取一个资源,我计划1个查询:expiredAge是600000毫秒。
db.resource.pool.findAndModify({
groupId:"groupId",
$or :[{state:"FREE"},{state:{$ne:"FREE"}, $where:"currentTime - this.lastFreeTime >= 600000"}]
},{state:"OCCUPIED, lastFreeTime:currentTime})
该查询始终显示在mongodb.log文件中,并且每秒生成1-3个警告。这个警告是什么意思?
请注意,我使用$ where来评估javascript。我还创建了groupId和state的索引。