我在我的应用程序中使用MongoDB,需要在MongoDB集合中插入多个文档。 我使用的版本是1.6
我在这里看到了一个例子
http://docs.mongodb.org/manual/core/create/
中的
批量插入多个文档部分
作者传递数组的地方。
当我尝试相同的,但为什么不允许,请告诉我如何一次插入多个文件?
package com;
import java.util.Date;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
public class App {
public static void main(String[] args) {
try {
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("at");
DBCollection collection = db.getCollection("people");
/*
* BasicDBObject document = new BasicDBObject();
* document.put("name", "mkyong"); document.put("age", 30);
* document.put("createdDate", new Date()); table.insert(document);
*/
String[] myStringArray = new String[] { "a", "b", "c" };
collection.insert(myStringArray); // Compilation error at this line saying that "The method insert(DBObject...) in the type DBCollection is not applicable for the arguments (String[])"
} catch (Exception e) {
e.printStackTrace();
}
}
}
请让我知道是什么方式,以便我可以通过java一次插入多个文档。
答案 0 :(得分:41)
DBCollection.insert
接受DBObject
,List<DBObject>
类型的参数或DBObject
的数组,以便一次插入多个文档。你传入一个字符串数组。
您必须手动填充文档(DBObject
s),将其插入List<DBObject>
或DBObject
个数组,最后insert
个。
DBObject document1 = new BasicDBObject();
document1.put("name", "Kiran");
document1.put("age", 20);
DBObject document2 = new BasicDBObject();
document2.put("name", "John");
List<DBObject> documents = new ArrayList<>();
documents.add(document1);
documents.add(document2);
collection.insert(documents);
上面的代码段与您在MongoDB shell中发出的命令基本相同:
db.people.insert( [ {name: "Kiran", age: 20}, {name: "John"} ]);
答案 1 :(得分:19)
在3.0之前,您可以在Java中使用以下代码
DB db = mongoClient.getDB("yourDB");
DBCollection coll = db.getCollection("yourCollection");
BulkWriteOperation builder = coll.initializeUnorderedBulkOperation();
for(DBObject doc :yourList)
{
builder.insert(doc);
}
BulkWriteResult result = builder.execute();
return result.isAcknowledged();
如果您使用 mongodb 3.0版,则可以使用
MongoDatabase database = mongoClient.getDatabase("yourDB");
MongoCollection<Document> collection = database.getCollection("yourCollection");
collection.insertMany(yourDocumentList);
答案 2 :(得分:17)
从MongoDB 2.6和2.12版驱动程序开始,您现在也可以执行bulk insert operation。在Java中,您可以使用BulkWriteOperation。使用它的一个例子可能是:
DBCollection coll = db.getCollection("user");
BulkWriteOperation bulk = coll.initializeUnorderedBulkOperation();
bulk.find(new BasicDBObject("z", 1)).upsert().update(new BasicDBObject("$inc", new BasicDBObject("y", -1)));
bulk.find(new BasicDBObject("z", 1)).upsert().update(new BasicDBObject("$inc", new BasicDBObject("y", -1)));
bulk.execute();
答案 3 :(得分:2)
您的插入记录格式,如MongoDB中查询从任何来源退出 EG。
{
"_id" : 1,
"name" : a
}
{
"_id" : 2,
"name" : b,
}
mongodb 3.0
FindIterable<Document> resulutlist = collection.find(query);
List docList = new ArrayList();
for (Document document : resulutlist) {
docList.add(document);
}
if(!docList.isEmpty()){
collectionCube.insertMany(docList);
}
答案 4 :(得分:2)
在MongoDB中创建文档有两个主要命令:
insertOne()
insertMany()
还有其他方法,例如Update
命令。我们将这些操作称为upserts。如果没有与用于识别文档的选择器匹配的文档,则会发生Upsert。
虽然MongoDB通过它自己插入ID,但我们也可以通过在_id
函数中指定insert...()
参数来手动插入自定义ID。
要插入多个文档,我们可以使用insertMany()
- 它将一组文档作为参数。执行时,它会为数组中的每个文档返回多个id
s。要删除集合,请使用drop()
命令。有时,在进行批量插入时 - 我们可能会插入重复值。具体来说,如果我们尝试插入重复的_id
,我们将获得duplicate key error
:
db.startup.insertMany( [ {_id:"id1", name:"Uber"}, {_id:"id2", name:"Airbnb"}, {_id:"id1", name:"Uber"}, ] );
如果遇到错误,MongoDB会停止插入操作,以阻止它 - 我们可以提供ordered:false
参数。例如:
db.startup.insertMany( [ {_id:"id1", name:"Uber"}, {_id:"id2", name:"Airbnb"}, {_id:"id1", name:"Airbnb"}, ], {ordered: false} );