什么是Mongo / Java中insertMany的更新等价物

时间:2015-04-01 17:56:00

标签: java mongodb

我正在尝试进行批量upsert,但是我有问题要弄清楚如何去做。这不起作用:

    BasicDBObject filter = new BasicDBObject();
    BasicDBObject update = new BasicDBObject("$set", list);
    UpdateOptions options = new UpdateOptions().upsert(true);
    collection.updateMany(filter, update, options);

线程中的异常" main" com.mongodb.MongoWriteException:修饰符对字段进行操作,但我们找到了一个数组。

任何例子都会很棒!

在一次往返中UpsertMany项目

这就是我的意思:

public static BulkWriteResult upsertAll(MongoCollection<Document> coll, List<Document> docs, String keyTag) {
    List<UpdateOneModel<Document>> requests = new ArrayList<UpdateOneModel<Document>>();
    UpdateOptions opt = new UpdateOptions().upsert(true);
    for (Document doc : docs ) {
        BasicDBObject filter = new BasicDBObject(keyTag, doc.get(keyTag)); 
        BasicDBObject action = new BasicDBObject("$set", doc);
        requests.add(new UpdateOneModel<Document>(filter, action, opt));
    }
    return coll.bulkWrite(requests);
}

2 个答案:

答案 0 :(得分:0)

这可能有效

db.collection.update({},{$ set:{&#34; my_field&#34;:[1,2,3]}},false,true)

答案 1 :(得分:0)

您可以使用以下代码执行批量转发:

    MongoClient mongo = new MongoClient("localhost", 27017);
    DB db = (DB) mongo.getDB("testDB");
    DBCollection collection = db.getCollection("collection");

    BasicDBObject obj = new BasicDBObject();
    obj.append("$set", new BasicDBObject("my_field", dbList));

    BasicDBList dbList = new BasicDBList();
    dbList.add(1);
    dbList.add(2);
    dbList.add(3);

    BulkWriteOperation bwo = collection.initializeUnorderedBulkOperation();
    bwo.find(new BasicDBObject()).upsert().update(obj);
    bwo.execute();

有关详细信息,请查看:http://www.journaldev.com/6324/mongodb-upsert-example-using-mongo-shell-and-java-driver