MongoDB插入多个线程

时间:2015-04-04 20:07:42

标签: java mongodb

我使用MongoDB作为数据库。因此,当我将文档插入数据库并且在我再次执行此操作后不久,它再次插入文档(我在插入文档之前检查数据库是否包含文档)。我认为它之所以这样做,是因为我运行了更新方法async,这意味着需要一些时间,所以当它检查它是否包含它时,它仍然会将它更新到数据库。

更新方法:

public static void updateAndInsert(final String collection, final String where, final String whereValue, final DBObject value)
{
    Utils.runAsync(new Runnable()
    {
        @Override
        public void run()
        {
            if(!contains(collection, where, whereValue))
                insert(collection, value);
            else
                db.getCollection(collection).update(new BasicDBObject(where, whereValue), new BasicDBObject("$set", value));
        }
    });
}

如何确保只插入一次?

1 个答案:

答案 0 :(得分:2)

一个没有问题的问题。哇! :D

你不应该这样做,因为MongoDB中没有交易。 你确实对单个文档进行了原子操作。

更好地使用upsert。在upsert的find部分中,您可以在contains方法中指定要执行的操作。 (也许看看这里:http://techidiocy.com/upsert-mongodb-java-example/或只是google for MongoDB和upsert)

通过这种方式,您可以在单个查询中执行containsinsertupdate。这就是你应该用MongoDB做的方式!