我使用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));
}
});
}
如何确保只插入一次?
答案 0 :(得分:2)
一个没有问题的问题。哇! :D
你不应该这样做,因为MongoDB中没有交易。 但你确实对单个文档进行了原子操作。
更好地使用upsert
。在upsert的find部分中,您可以在contains
方法中指定要执行的操作。 (也许看看这里:http://techidiocy.com/upsert-mongodb-java-example/或只是google for MongoDB和upsert)
通过这种方式,您可以在单个查询中执行contains
,insert
和update
。这就是你应该用MongoDB做的方式!