1。概要
このチュートリアルでは、MongoDBの配列にドキュメントを挿入する方法を紹介します。さらに、$pushとのさまざまなアプリケーションが表示されます。 $ addToset 配列に値を追加する演算子。
まず、サンプルデータベースとコレクションを作成し、それにダミーデータを挿入します。さらに、 $ pushを使用してドキュメントを更新するためのいくつかの基本的な例を調べます。 オペレーター。後で、 $ pushのさまざまなユースケースについても説明します。 および$addtoSet 演算子。
MongoDBの配列にドキュメントを挿入するためのさまざまな方法を詳しく見ていきましょう。
2。データベースの初期化
まず、新しいデータベースを設定しましょう baeldung およびサンプルコレクション、注文 :
use baeldung;
db.createCollection(orders);
insertMany を使用して、コレクションにいくつかのドキュメントを追加しましょう。 方法:
db.orders.insertMany([
{
"customerId": 1023,
"orderTimestamp": NumberLong("1646460073000"),
"shippingDestination": "336, Street No.1 Pawai Mumbai",
"purchaseOrder": 1000,
"contactNumber":"9898987676",
"items": [
{
"itemName": "BERGER",
"quantity": 1,
"price": 500
},
{
"itemName": "VEG PIZZA",
"quantity": 1,
"price": 800
}
]
},
{
"customerId": 1027,
"orderTimestamp": NumberLong("1646460087000"),
"shippingDestination": "445, Street No.2 Pawai Mumbai",
"purchaseOrder": 2000,
"contactNumber":"9898987676",
"items": [
{
"itemName": "BERGER",
"quantity": 1,
"price": 500
},
{
"itemName": "NON-VEG PIZZA",
"quantity": 1,
"price": 1200
}
]
}
]);
挿入が成功した場合、上記のコマンドは以下に示すようなJSONを出力します。
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("622300cc85e943405d04b567"),
ObjectId("622300cc85e943405d04b568")
]
}
これまで、データベースとコレクションのセットアップに成功しました。このデータベースとコレクションをすべての例に使用します。
3。 Mongoクエリを使用したプッシュ操作
MongoDBは、MongoDBドキュメントの配列を更新するためのさまざまなタイプの配列演算子を提供します。 $ push MongoDBの演算子は、配列の最後に値を追加します。 クエリの種類に応じて、 $ pushを使用できます。 updateOneのようなメソッドを持つ演算子 、 updateMany 、 findAndModify 、など。
$ pushを使用してシェルクエリを調べてみましょう。 演算子:
db.orders.updateOne(
{
"customerId": 1023
},
{
$push: {
"items":{
"itemName": "PIZZA MANIA",
"quantity": 1,
"price": 800
}
}
});
上記のクエリは次のドキュメントを返します:
{
"acknowledged":true,
"matchedCount":1,
"modifiedCount":1
}
customerIdを使用してドキュメントを確認してみましょう 1023.ここで、新しいアイテムがリスト「 items 」の最後に挿入されていることがわかります。 「:
{
"customerId" : 1023,
"orderTimestamp" : NumberLong("1646460073000"),
"shippingDestination" : "336, Street No.1 Pawai Mumbai",
"purchaseOrder" : 1000,
"contactNumber" : "9898987676",
"items" : [
{
"itemName" : "BERGER",
"quantity" : 1,
"price" : 500
},
{
"itemName" : "VEG PIZZA",
"quantity" : 1,
"price" : 800
},
{
"itemName" : "PIZZA MANIA",
"quantity" : 1,
"price" : 800
}
]
}
4。 Javaドライバーコードを使用したプッシュ操作
これまで、ドキュメントを配列にプッシュするためのMongoDBシェルクエリについて説明してきました。次に、Javaコードを使用してプッシュ更新クエリを実装しましょう。
更新操作を実行する前に、まず注文に接続しましょう baeldungのコレクション データベース:
mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("baeldung");
MongoCollection<Document> collection = database.getCollection("orders");
ここでは、この場合、ローカルホストのデフォルトポート27017で実行されているMongoDBに接続しています。
4.1。 DBObjectの使用
MongoDB Javaドライバーは、両方の DBObjectのサポートを提供します およびBSON 資料。ここでは、 DBObject はMongoDBレガシードライバーの一部ですが、新しいバージョンのMongoDBでは廃止されています。
次に、Javaドライバコードを調べて、配列に新しい値を挿入しましょう。
DBObject listItem = new BasicDBObject("items", new BasicDBObject("itemName", "PIZZA MANIA")
.append("quantity", 1)
.append("price", 800));
BasicDBObject searchFilter = new BasicDBObject("customerId", 1023);
BasicDBObject updateQuery = new BasicDBObject();
updateQuery.append("$push", listItem);
UpdateResult updateResult = collection.updateOne(searchFilter, updateQuery);
上記のクエリでは、最初に BasicDBObjectを使用してアイテムドキュメントを作成しました。 。 searchQueryに基づいて コレクションのドキュメントがフィルタリングされ、値が配列にプッシュされます。
4.2。 BSONを使用する ドキュメント
BSON ドキュメントは、新しいクライアントスタックで構築されたJavaでMongoDBドキュメントにアクセスするための新しい方法です。 org.bson.Document クラスはそれほど複雑ではなく、使いやすいです。
org.bson.Documentを使用してみましょう 値を配列「items」にプッシュするクラス :
Document item = new Document()
.append("itemName1", "PIZZA MANIA")
.append("quantity", 1).append("price", 800);
UpdateResult updateResult = collection.updateOne(Filters.eq("customerId", 1023), Updates.push("items", item));
この場合、 BSONの実装 DBObjectを使用して実行されるコードに似ています 更新も同じになります。ここでは、 updateOneを使用しました 単一のドキュメントのみを更新する方法。
5。 addToSetを使用する オペレーター
$ addToSet 演算子を使用して、配列内の値をプッシュすることもできます。この演算子は、その値が配列に存在しない場合にのみ値を追加します。それ以外の場合は、無視されます。一方、プッシュ演算子は、フィルタリングする条件として値をプッシュして一致を取得します。
注意すべき重要なポイントの1つは、 $ addToSetです。 アイテムが重複している場合、オペレーターはバリューワークをプッシュしません。 一方、$push演算子 他の条件に関係なく、値を配列にプッシュするだけです。
5.1。 addToSetを使用したシェルクエリ オペレーター
$ addToSetのmongoシェルクエリ 演算子は$pushに似ています 演算子ですが、 $ addToSet 重複する値を配列に挿入しません。
次に、MongoDBクエリをチェックして、 $ addTosetを使用して値を配列にプッシュします。 :
db.orders.updateOne(
{
"customerId": 1023
},
{
$addToSet: {
"items":{
"itemName": "PASTA",
"quantity": 1,
"price": 1000
}
}
});
この場合、出力は次のようになります。
{
"acknowledged":true,
"matchedCount":1,
"modifiedCount":1
}
この場合、 $ addToSetを使用しました 演算子であり、ドキュメントは一意である場合にのみ配列「アイテム」にプッシュされます。
5.2。 addToSetを使用するJavaドライバー オペレーター
$ addToSet 演算子は、プッシュ演算子とは異なるタイプの配列更新操作を提供します:
Document item = new Document()
.append("itemName1", "PIZZA MANIA")
.append("quantity", 1).append("price", 800);
UpdateResult updateResult = collection
.updateOne(Filters.eq("customerId", 1023), Updates.addToSet("items", item));
System.out.println("updateResult:- " + updateResult);
上記のコードでは、最初にドキュメント「 item 」を作成しました 「、および customerIdに基づいて フィルタ、 updateOne メソッドはドキュメント「item」をプッシュしようとします 」を配列「items 「。