当前位置: 首页 > 知识库问答 >
问题:

Java Method for MongoDB collection.save()

邰博远
2023-03-14

当我尝试添加带有自定义_id字段的文档时,我在使用MongoDBJava时遇到了问题。当我向该集合插入新文档时,如果文档_id已经存在,我想忽略它。

在Mongo shell中,在这种情况下可以使用collection.save(),但是我找不到与MongoDB java驱动程序等效的方法。

仅举一个例子:

  • 我有一个包含网站信息的文档集合,其中URL作为_id字段(这是唯一的)
  • 我想添加更多文档。在那些新文档中,有些可能存在于当前集合中。所以我想继续添加所有新文档,除了重复的文档。
  • 这可以通过Mongo Shell中的collection.save()来实现,但是使用MongoDBJava驱动程序,我找不到等效的方法。

希望有人能分享解决方案。提前感谢!

共有2个答案

罗寒
2023-03-14

我想保存就是这样做的。

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。

郎吉星
2023-03-14

在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上找到并根据您的情况进行编辑)。您可能需要编辑它,使其适合您当前的配置。它也未经测试。

 类似资料:

相关问答

相关文章

相关阅读