【MongoDB】プロパティ名で検索して、そのフィールドを持つドキュメントを探す方法
MongoDBで特定のプロパティ(フィールド)を持つドキュメントを検索する方法
MongoDBでは、「特定のフィールドを持つドキュメント」を検索したい場合に、$ne 演算子(not equal/〜と等しくない)を利用すると便利です。{ フィールド名: { $ne: null } } という条件を指定することで、そのフィールドが存在し、かつ null ではないドキュメントだけを抽出できます。
それでは、まずドキュメントを含むコレクションを作成してみましょう。
1. サンプルコレクションの作成
> db.searchByPropertyName.insertOne({"FirstName":"Larry","Age":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7af7219729fde21ddb5")
}
> db.searchByPropertyName.insertOne({"FirstName":null,"Age":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7b97219729fde21ddb6")
}
> db.searchByPropertyName.insertOne({"FirstName":"John","Age":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7c57219729fde21ddb7")
}
> db.searchByPropertyName.insertOne({"FirstName":null,"Age":25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7d07219729fde21ddb8")
}
> db.searchByPropertyName.insertOne({"FirstName":"David","Age":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbaf7df7219729fde21ddb9")
}2. 登録された全ドキュメントの確認
find() メソッドに pretty() を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.searchByPropertyName.find().pretty();
このクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5cbaf7af7219729fde21ddb5"),
"FirstName" : "Larry",
"Age" : 23
}
{
"_id" : ObjectId("5cbaf7b97219729fde21ddb6"),
"FirstName" : null,
"Age" : 21
}
{
"_id" : ObjectId("5cbaf7c57219729fde21ddb7"),
"FirstName" : "John",
"Age" : 22
}
{
"_id" : ObjectId("5cbaf7d07219729fde21ddb8"),
"FirstName" : null,
"Age" : 25
}
{
"_id" : ObjectId("5cbaf7df7219729fde21ddb9"),
"FirstName" : "David",
"Age" : 20
}3. $ne 演算子を使ってプロパティ名で検索する
ここで、$ne 演算子を使って「FirstName プロパティを持つドキュメント」だけを検索してみます。
> db.searchByPropertyName.find({FirstName: { $ne : null } } ).pretty();実行結果は以下の通りです。FirstName が null のドキュメントが除外され、値が設定されているドキュメントのみが取得できているのがわかります。
{
"_id" : ObjectId("5cbaf7af7219729fde21ddb5"),
"FirstName" : "Larry",
"Age" : 23
}
{
"_id" : ObjectId("5cbaf7c57219729fde21ddb7"),
"FirstName" : "John",
"Age" : 22
}
{
"_id" : ObjectId("5cbaf7df7219729fde21ddb9"),
"FirstName" : "David",
"Age" : 20
}補足:$exists 演算子との違い
なお、MongoDBでは { フィールド名: { $exists: true } } を使うことでも「そのフィールドを持つドキュメント」を検索できます。ただし、$exists はフィールドの有無のみを判定するため、値が null のドキュメントも結果に含まれます。一方、$ne: null を使えば、フィールドが存在し、かつ null 以外の実際の値が格納されているドキュメントのみを絞り込むことが可能です。用途に応じて使い分けるとよいでしょう。
-
SeekFastでファイル内のテキストを一括検索!特徴・使い方・料金を徹底解説
本記事はSeekFast提供のスポンサー記事です。記事の内容および意見は、スポンサーが付いた場合でも編集の独立性を保つ著者自身の見解によるものです。 はじめに:ファイル名検索とファイル内容検索の違い 現代のOSにおいて、「ファイルを見つける」という作業はすでに解決済みの課題といえます。探しているファイルの名前がおよそ分かっていれば、目的のファイルにたどり着くのは難しいことではありません。 しかし、ファイルの中身から特定のテキストを探し出すのは、今なお容易ではありません。コマンドラインを使えばプレーンテキストファイル内を検索できますが、それで問題全体が解決するわけではありません。たとえば
-
MongoDBでリスト内の値(オブジェクト以外)をクエリする方法
リスト(配列)内の値をクエリするには、MongoDBの位置演算子($)を使用します。位置演算子は、クエリ条件に一致した配列の要素だけを取得したい場合に非常に便利です。まずは、ドキュメントを含むコレクションを作成しましょう。> db.demo628.insertOne({id:1,Name:["Chris","David","John"]}); { "acknowledged" : true, "insertedId" : ObjectId("5e9ae7ea6c954