当我尝试添加带有自定义_id字段的文档时,我在使用MongoDBJava时遇到了问题。当我向该集合插入新文档时,如果文档_id已经存在,我想忽略它。
在Mongo shell中,在这种情况下可以使用collection.save(),但是我找不到与MongoDB java驱动程序等效的方法。
仅举一个例子:
希望有人能分享解决方案。提前感谢!
我想保存
就是这样做的。
fun save(doc: Document, col: MongoCollection<Document>) {
if (doc.getObjectId("_id") != null) {
doc.put("_id", ObjectId()) // generate a new id
}
col.replaceOne(Document("_id", doc.getObjectId("_id")), doc)
}
也许他们删除了保存
,以便您决定如何生成新的id。
在MongoDB Java驱动程序中,您可以尝试将< code>BulkWriteOperation对象与< code>DBCollection对象(包含您的集合的对象)的< code > initializeorderedbbulkooperation()方法一起使用。其用法如下:
MongoClient mongo = new MongoClient("localhost", port_number);
DB db = mongo.getDB("db_name");
ArrayList<DBObject> objectList; // Fill this list with your objects to insert
BulkWriteOperation operation = col.initializeOrderedBulkOperation();
for (int i = 0; i < objectList.size(); i++) {
operation.insert(objectList.get(i));
}
BulkWriteResult result = operation.execute();
使用这种方法,您的文档将一次插入一个,并在每次插入时进行错误处理,因此具有重复id的文档将照常抛出错误,但对其余文档的操作仍将继续。最后,您可以使用< code>BulkWriteResult对象的< code>getInsertedCount()方法来了解实际插入了多少个文档。
然而,如果大量数据以这种方式插入,这可能会有点无效。这只是示例代码(在journaldev.com上找到并根据您的情况进行编辑)。您可能需要编辑它,使其适合您当前的配置。它也未经测试。