MongoDBのfindOne()メソッドは、入力された条件に一致するドキュメントを1つだけ返します。入力された条件が複数のドキュメントに一致する場合、このメソッドは自然な順序に従って1つのドキュメントを返します。これは、ドキュメントがデータベースに格納されている順序を反映しています。
MongoDB findOne
MongoDBのfindOne()構文は次のとおりです:
db.collection.findOne(<criteria>、<projection>)
criteria – 入力された選択基準を指定します。projection – 返されるドキュメントに表示されるフィールドのリストを指定します。MongoDB findOneに関するいくつかの重要なポイント:
- projectionパラメータは、1またはtrue、0またはfalseのブール値を受け入れます。プロジェクションフィールドが指定されていない場合、すべてのフィールドが取得されます。
- MongoDB findOne()は、projectionパラメータで明示的に指定されていない場合でも、_idフィールドを常に含みます。
- MongoDBのfindOne()は、カーソルではなく、常にドキュメントを返します。
MongoDB findOne – Empty Query specification
この操作は、指定されたコレクションから単一のドキュメントを返します。例えば、db.car.findOne()
出力:
{
"_id" : 2,
"name" : "Polo", "color" : "White",
"cno" : "H411", "speed" : 45, "mfdcountry" : "Japan"
}
コレクションcar
から1つのレコードが取得されます。データベースに最初に “Polo” が挿入されたことに注意してください。
MongoDB findOne – クエリ仕様
このMongoDB findOne操作は、指定されたコレクションから最初に一致するドキュメントを、入力された選択条件と共に返します。例えば:
>db.car.findOne(
... {
... $or:[
... {name:"Zen"},
... {speed: {$gt:60}} ... ]
... }
... )
{
"_id" : ObjectId("546cb92393f464ed49d620db"),
"name" : "Zen",
"color" : "JetRed",
"cno" : "H671",
"speed" : 67,
"mfdcountry" : "Rome"
}
この操作は、名前が “Zen” または速度が60を超える車を検索し、条件を満たす最初のドキュメントを車のコレクションから取得します。
MongoDB findOne() でのプロジェクション
プロジェクションパラメータは、MongoDB findOneメソッドにも適用されます。findOneでプロジェクションを使用できるいくつかのシナリオを見てみましょう。
MongoDB findOne – 返されるフィールドを指定
この操作では、クエリで指定されたフィールドのみが表示されます。例えば:
>db.car.findOne(
... { },
... {name:1,color:1}
... )
{ "_id" : 2, "name" : "Polo", "color" : "White" }
Carコレクションからid、name、colorフィールドを持つ最初のドキュメントが表示されます。
MongoDB findOne – 除外されたフィールドを除くすべてのフィールドを返す
この操作では、選択基準で指定されたフィールドを除いた最初のドキュメントが取得されます。例えば:
>db.car.findOne(
... { name:"Volkswagen" },
... {_id:0, mfdcountry:0,cno:0 }
... )
{ "name" : "Volkswagen", "color" : "JetBlue", "speed" : 62 }
Volkswagenの車名がid、mfdcountry、cnoフィールドを除いて取得されます。
MongoDB findOneの結果ドキュメント
この操作ではカーソルメソッドは機能しません。なぜなら、このメソッドは単一のドキュメントしか返さないからです。ドキュメントから個々のフィールド値を印刷するには、以下のコードを使用できます。
>var car = db.car.findOne();
> if (car) {
... var carName = car.name;
... print (tojson(carName));
... }
"Polo"
これにより、「Polo」という車の名前のみが取得されます。
MongoDB findOne Javaの例
以下は、MongoDB findOne()を使用するためのさまざまなオプションを示すJavaプログラムです。MongoDBFindOne.java
package com.journaldev.mongodb;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import java.net.UnknownHostException;
public class MongoDBFindOne {
// criteriaなしで最初のドキュメントを取得するメソッド
public static void emptyFindOne() throws UnknownHostException {
// 実行中のDBへの新しい接続を取得する
MongoClient mongoClient = new MongoClient("localhost");
// データベースにはtestを使用し、ここに自分のデータベースを使用する
DB db = mongoClient.getDB("test");
// コレクションオブジェクトを取得する、ここではcarを使用し、自分のものを使用する
DBCollection coll = db.getCollection("car");
// findOne()メソッドを呼び出す
DBObject doc = coll.findOne();
// 結果のドキュメントを表示する
System.out.println(doc);
}
// 選択基準に基づいてドキュメントを取得するメソッド
public static void querySpecification() throws UnknownHostException {
// 接続を毎回取得する必要はない(1回行えばよい)
// globally).
MongoClient mongoClient = new MongoClient("localhost");
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("car");
// 名前とスピードの値でドキュメントをフィルタリングするクエリ
// 新しいオブジェクトを作成することで結果のドキュメントを取得する
DBObject query = new BasicDBObject("name", "Zen").append("speed",
new BasicDBObject("$gt", 30));
// 条件を満たすことで取得された結果のドキュメント
DBObject d1 = coll.findOne(query);
// ドキュメントをコンソールに表示する
System.out.println(d1);
}
public static void projectionFields() throws UnknownHostException {
MongoClient mongoClient = new MongoClient("localhost");
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("car");
// 新しいDBオブジェクトを作成する
BasicDBObject b1 = new BasicDBObject();
// 結果に表示するのは名前と色のフィールドのみ
// document
BasicDBObject fields = new BasicDBObject("name", 1).append("color", 1);
// フィールドとオブジェクトを受け入れてドキュメントを取得するメソッド
// criteria
DBObject d1 = coll.findOne(b1, fields);
System.out.println(d1);
}
public static void excludeByfields() throws UnknownHostException {
MongoClient m1 = new MongoClient("localhost");
DB db = m1.getDB("test");
DBCollection col = db.getCollection("car");
// 車名がvolkswagenのフィルター基準
DBObject query = new BasicDBObject("name", "Volkswagen");
// mfdcountry、cno、idフィールドを除外する
BasicDBObject fields = new BasicDBObject("mfdcountry", 0).append("cno",
0).append("_id", 0);
DBObject d1 = col.findOne(query, fields);
System.out.println(d1);
}
public static void printDoc() throws UnknownHostException {
MongoClient m1 = new MongoClient("localhost");
DB db = m1.getDB("test");
DBCollection col = db.getCollection("car");
DBObject d1 = col.findOne();
// 車の名前のみを表示する
System.out.println((d1.get("name")));
}
public static void main(String[] args) throws UnknownHostException {
// mainからすべてのメソッドを呼び出す
emptyFindOne();
querySpecification();
projectionFields();
excludeByfields();
printDoc();
}
}
出力は次のとおりです:
{ "_id" : 2.0 , "name" : "Polo" , "color" : "White" , "cno" : "H411" , "speed" : 45.0 , "mfdcountry" : "Japan"}
{ "_id" : { "$oid" : "546cb92393f464ed49d620db"} , "name" : "Zen" , "color" : "JetRed" , "cno" : "H671" , "speed" : 67 , "mfdcountry" : "Rome"}
{ "_id" : 2.0 , "name" : "Polo" , "color" : "White"}
{ "name" : "Volkswagen" , "color" : "JetBlue" , "speed" : 62}
Polo
MongoDBのfindOne()メソッドに関してはこれで終わりです。今後の投稿では、MongoDBのさらなるオプションを見ていきます。参照:公式ドキュメント
Source:
https://www.digitalocean.com/community/tutorials/mongodb-findone-example