gpt4 book ai didi

java - MongoDB 在多线程中插入

转载 作者:行者123 更新时间:2023-12-02 04:48:43 24 4
gpt4 key购买 nike

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

更新方法:

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));
}
});
}

如何确保它只插入一次?

最佳答案

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

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

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

这样您就可以在单个查询中执行包含插入更新。这就是您使用 MongoDB 应该采取的方式!

关于java - MongoDB 在多线程中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29450920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com