1。概要
このチュートリアルでは、MongoDBからキー名で値を取得する方法を学習します。適用されたフィルターに基づいてドキュメントのキーフィールド名を取得するために、MongoDBのさまざまなメソッドを検討します。まず、 findを使用します またはfindone 必要なデータをフェッチし、後で集計を使用するメソッド 方法。ここでは、MongoDBシェルクエリとJavaドライバーコードの両方でクエリを記述します。
フィールド名でMongoDBの値を取得するさまざまな方法を見てみましょう。
2。データベースの初期化
まず、新しいデータベースを設定する必要があります baeldung そして新しいコレクション、 travel :
use baeldung;
db.createCollection(travel);
insertMany を使用して、コレクションにダミーデータを追加してみましょう。 MongoDBのメソッド:
db.travel.insertMany([
{
"passengerId":145,
"passengerName":"Nathan Green",
"passengerAge":25,
"sourceStation":"London",
"destinationStation":"Birmingham",
"seatType":"Slepper",
"emailAddress":"[email protected]"
},
{
"passengerId":148,
"passengerName":"Kevin Joseph",
"passengerAge":28,
"sourceStation":"Manchester",
"destinationStation":"London",
"seatType":"Slepper",
"emailAddress":"[email protected]"
},
{
"passengerId":154,
"passengerName":"Sheldon burns",
"passengerAge":26,
"sourceStation":"Cambridge",
"destinationStation":"Leeds",
"seatType":"Slepper",
"emailAddress":"[email protected]"
},
{
"passengerId":168,
"passengerName":"Jack Ferguson",
"passengerAge":24,
"sourceStation":"Cardiff",
"destinationStation":"Coventry",
"seatType":"Slepper",
"emailAddress":"[email protected]"
}
]);
上記のinsertMany クエリは次のJSONを返します:
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("623d7f079d55d4e137e47825"),
ObjectId("623d7f079d55d4e137e47826"),
ObjectId("623d7f079d55d4e137e47827"),
ObjectId("623d7f079d55d4e137e47828")
]
}
これまで、ダミーデータをコレクション travelに挿入しました。 。
3。 findの使用 方法
検索 メソッドは、コレクションで指定されたクエリ条件に一致するドキュメントを検索して返します。複数のドキュメントが条件に一致する場合、ディスク上のドキュメントの順序に基づいてすべてのドキュメントが返されます。さらに、MongoDBでは、 find メソッドは、クエリでパラメータの射影をサポートします。 findで投影パラメータを指定した場合 メソッドの場合、投影フィールドのみを含むすべてのドキュメントが返されます。
注意すべき重要な点の1つは、 _id 明示的に削除されない限り、フィールドは常に応答に含まれます。
実例を示すために、シェルクエリを調べて、キーフィールドを投影してみましょう。
db.travel.find({},{"passengerId":1}).pretty();
上記のクエリに対する応答は次のようになります。
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }
ここで、このクエリでは、passengerIdを単純に投影しました。 ここで、 _idを除いたキーフィールドを調べてみましょう。 :
db.travel.find({},{"passengerId":1,"_id":0}).pretty();
上記のクエリには次の応答があります:
{ "passengerId" : 145 }
{ "passengerId" : 148 }
{ "passengerId" : 154 }
{ "passengerId" : 168 }
ここで、このクエリでは、 _idを除外しました 応答予測からのフィールド。上記のクエリのJavaドライバコードを見てみましょう:
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB database = mongoClient.getDB("baeldung");
DBCollection collection = database.getCollection("travel");
BasicDBObject queryFilter = new BasicDBObject();
BasicDBObject projection = new BasicDBObject();
projection.put("passengerId", 1);
projection.put("_id", 0);
DBCursor dbCursor = collection.find(queryFilter, projection);
while (dbCursor.hasNext()) {
System.out.println(dbCursor.next());
}
上記のコードでは、最初に MongoClientを作成しました ポート27017で実行されているローカルmongoサーバーとの接続 。次に、 findを使用しました メソッド。queryFilter、の2つのパラメータがあります。 と投影。クエリDBObject データをフェッチするために必要なフィルターが含まれています。ここでは、 DBCursor を使用して、渡航文書のすべての投影フィールドを印刷しました。 。
4。 集計を使用する 方法
集計 MongoDBの操作は、データレコードとドキュメントを処理し、計算結果を返します。さまざまなドキュメントから値を収集し、それらをグループ化してから、グループ化されたデータに対して、合計、平均、最小、最大などのさまざまなタイプの操作を実行します。
より複雑な集計を行う必要がある場合は、MongoDB集計パイプラインを使用できます。 集約パイプラインは、MongoDBクエリ構文と組み合わされたステージのコレクションであり、集約された結果を生成します。
集計クエリを調べて、キー名で値を取得してみましょう:
db.travel.aggregate([
{
"$project":{
"passengerId":1
}
}
]).pretty();
上記の集計クエリへの応答は次のようになります:
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }
この場合、 $ projectを使用しました 集約パイプラインのステージ。 $ project 含めるまたは除外するフィールドを指定します。クエリでは、passengerIdのみを投影ステージに渡しました。
上記のクエリのJavaドライバコードを見てみましょう:
ArrayList<Document> response = new ArrayList<>();
ArrayList<Document> pipeline = new ArrayList<>(Arrays.asList(new Document("$project", new Document("passengerId", 1L))));
database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- " + response);
次の方法で集計パイプラインを作成することもできます。
ArrayList<Document> response = new ArrayList<>();
ArrayList<Bson> pipeline = new ArrayList<>(Arrays.asList(
project(fields(Projections.exclude("_id"), Projections.include("passengerId")))));
MongoDatabase database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- "+response);
Javaドライバーコードを使用して集計パイプラインを作成し、プロジェクトステージをpassengerIdのみを含むように設定しました。 分野。最後に、集計パイプラインを集計に渡しました。 データを取得する方法。