2014-01-27 51 views
0

我有一个庞大的数据库,我必须在“关键字”列中找到某些关键字。如果我在“关键字”列中找到要搜索的单词,则我更新(增加1)同一元组中的另一列“计数器”。 我想要做的是,使用线程同时搜索多个关键字,一找到关键字就会增加计数器值。在java中使用多线程更新mongodb

例如:我想搜索“身份验证”和“失败”。 我运行了2个线程 最后,“关键字”列作为“身份验证,失败”的元组应该具有“计数器”值为2 而“关键字”列值为“身份验证,传递”的元组应具有“计数器“值为1. 而”关键字“列值为”安全,通过“的元组应具有”计数器“值为0.

在此先感谢您的帮助。

回答

1

如果你在你的线程上使用$inc你应该得到你想要的。

编辑:

主题1:

coll.update({ keywords: "authentification" }, { $inc: { counter: 1 } }); 

线程2:

coll.update({ keywords: "failure" }, { $inc: { counter: 1 } }); 

你有什么保证是,该keywords财产,则与stringarray设置。如果您的源数据看起来像"Authentication, Passes",那么您必须解析该数据,并将其作为array,如[ "authentification", "passes" ]

+0

所有线程同时在数据库上工作。 在所有线程更新“计数器”值之前,所有线程都会读取元组值。 例如:如果一个元组包含“验证”和“失败”。在DB上工作的2个线程读取“Counter”列的值为0.并且两个线程将其更新为1,比0和1和1到2 –

+0

更新前不必读取元组。你可以在'update'的第一个参数中给出更新条件。看我的编辑。 – heinob