MongoDBでObjectIdを指定してドキュメントを検索する方法
MongoDBでObjectIdを指定してドキュメントを検索する方法
MongoDBでは、各ドキュメントに自動的に割り当てられる「_id」フィールド(ObjectId)をキーにして、特定のドキュメントを正確に検索できます。ObjectIdを条件にドキュメントを取得するには、find()メソッドと組み合わせて以下の構文を使用します。
db.yourCollectionName.find({"_id":ObjectId("yourObjectIdValue")}).pretty();
この構文の動作を理解するために、まずサンプルコレクションを作成し、ドキュメントを挿入してみましょう。
サンプルデータの作成
insertOne()メソッドを使って、複数のドキュメントをコレクションに登録します。
> db.findDocumentWithObjectIdDemo.insertOne({"UserName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c90e4384afe5c1d2279d69b")
}
> db.findDocumentWithObjectIdDemo.insertOne({"UserName":"Mike","UserAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c90e4444afe5c1d2279d69c")
}
> db.findDocumentWithObjectIdDemo.insertOne({"UserName":"Carol","UserAge":26,"UserHobby":["Learning","Photography"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c90e4704afe5c1d2279d69d")
}
登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.findDocumentWithObjectIdDemo.find().pretty();
実行結果は以下の通りです。
{ "_id" : ObjectId("5c90e4384afe5c1d2279d69b"), "UserName" : "Larry" }
{
"_id" : ObjectId("5c90e4444afe5c1d2279d69c"),
"UserName" : "Mike",
"UserAge" : 23
}
{
"_id" : ObjectId("5c90e4704afe5c1d2279d69d"),
"UserName" : "Carol",
"UserAge" : 26,
"UserHobby" : [
"Learning",
"Photography"
]
}
ケース1:特定のObjectIdでドキュメントを検索する
MongoDBでObjectIdを指定してドキュメントを取得するクエリは以下の通りです。
> db.findDocumentWithObjectIdDemo.find({"_id":ObjectId("5c90e4704afe5c1d2279d69d")}).pretty();
実行結果:
{
"_id" : ObjectId("5c90e4704afe5c1d2279d69d"),
"UserName" : "Carol",
"UserAge" : 26,
"UserHobby" : [
"Learning",
"Photography"
]
}
ケース2:別のObjectIdでドキュメントを検索する
同様に、別のObjectIdを指定した場合の検索例です。
> db.findDocumentWithObjectIdDemo.find({"_id": ObjectId("5c90e4444afe5c1d2279d69c")}).pretty();
実行結果:
{
"_id" : ObjectId("5c90e4444afe5c1d2279d69c"),
"UserName" : "Mike",
"UserAge" : 23
}
ポイントまとめ
_idフィールドは単なる文字列ではなくObjectId型として保存されているため、検索時には必ずObjectId()関数で値をラップする必要があります。文字列をそのまま比較しても、一致するドキュメントは見つかりません。また、pretty()メソッドを付けると、出力が整形されて読みやすくなります。
-
MongoDBのfind()クエリでネストされたドキュメントを取得する方法
MongoDBでネストされたドキュメント(入れ子になったサブドキュメントや配列内のオブジェクト)から値を取得するには、「ドット表記(dot notation)」を使用します。この記事では、サンプルコレクションを作成し、find()クエリを使ってネストされたデータを検索する具体的な手順を解説します。 サンプルコレクションの作成 まず、insert()メソッドを使ってドキュメントを含むコレクションを作成しましょう。 > db.demo591.insert([ ... { "Name": "John", "Age": 23 },
-
MongoDBで価格が特定の値未満のレコードを検索する方法($lt演算子の使い方)
MongoDBで、価格(Price)が特定の値より小さいレコードを検索したい場合には、比較クエリ演算子の一つである $lt(less than)を使用します。$ltは「指定した値より小さい」ドキュメントのみを抽出するための演算子です。この記事では、実際にコレクションを作成し、$lt演算子を使って条件に合致するドキュメントを検索する手順を順番に解説します。1. テスト用コレクションの作成まず、insertOne() メソッドを使って、サンプル用のコレクション「demo728」にドキュメントを挿入します。> db.demo728.insertOne({Price:75}); { ac