Как вставлять сразу несколько документов в MongoDB через Java
Я использую 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.
Ответы
Ответ 1
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:
db.people.insert( [ {name: "Kiran", age: 20}, {name: "John"} ]);
Ответ 2
До версии 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);
Ответ 3
Начиная с версии драйвера MongoDB версии 2.6 и 2.12 вы также можете выполнить операцию объемной вставки. В 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();
Ответ 4
Создание документов
Существуют две основные команды для создания документов в MongoDB:
Существуют и другие способы, такие как команды Update
. Мы называем эти операции, upserts. Upserts происходит, когда нет документов, которые соответствуют селектору, используемому для идентификации документов.
Хотя MongoDB вставляет идентификатор самостоятельно, мы также можем вручную вставлять пользовательские идентификаторы, указав параметр _id
в функциях insert...()
.
Чтобы вставить несколько документов, мы можем использовать insertMany()
-, который принимает в качестве параметра массив документов. При выполнении он возвращает несколько id
для каждого документа в массиве. Чтобы удалить коллекцию, используйте команду drop()
. Иногда при выполнении объемных вставок мы можем вставлять повторяющиеся значения. В частности, если мы попытаемся вставить дубликат _id
s, мы получим 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}
);
Ответ 5
Ваш формат записи вставки, как в 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);
}