MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBの検索結果から_idフィールドを除外する方法

MongoDBでfind()メソッドを使ってドキュメントを検索すると、デフォルトでは必ず_idフィールドが結果に含まれます。しかし、APIレスポンスや出力整形などの場面では、_idを表示したくないケースもあります。

結論から言うと、射影(projection)の指定で_idフィールドに0を設定すれば、検索結果から_idを除外できます。これはMongoDBの中で_idだけが許されている特別な挙動です(通常、他のフィールドは0と1を混在させて指定できません)。

基本構文

db.yourCollectionName.find({}, {_id: 0});

第1引数「{}」は検索条件(すべてのドキュメントが対象)、第2引数「{_id: 0}」が射影指定で、_idを非表示にする意味になります。

動作確認用コレクションの作成

実際に動きを確認するため、サンプルコレクションにドキュメントを挿入してみましょう。

> db.removeIdDemo.insertOne({"UserName":"John","UserAge":23});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb4042d66697741252440")
}
> db.removeIdDemo.insertOne({"UserName":"Mike","UserAge":27});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb40c2d66697741252441")
}
> db.removeIdDemo.insertOne({"UserName":"Sam","UserAge":34});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb4162d66697741252442")
}
> db.removeIdDemo.insertOne({"UserName":"Carol","UserAge":29});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb4222d66697741252443")
}

_idを含む通常の検索結果

まずはfind()メソッドで全ドキュメントを取得してみます。pretty()を付けると見やすい形式で出力されます。

> db.removeIdDemo.find().pretty();

実行結果は以下の通りです。各ドキュメントに自動生成されたObjectIdが付与されているのが分かります。

{
    "_id" : ObjectId("5c9bb4042d66697741252440"),
    "UserName" : "John",
    "UserAge" : 23
}
{
    "_id" : ObjectId("5c9bb40c2d66697741252441"),
    "UserName" : "Mike",
    "UserAge" : 27
}
{
    "_id" : ObjectId("5c9bb4162d66697741252442"),
    "UserName" : "Sam",
    "UserAge" : 34
}
{
    "_id" : ObjectId("5c9bb4222d66697741252443"),
    "UserName" : "Carol",
    "UserAge" : 29
}

_idを除外した検索結果

次に、射影で{_id: 0}を指定してクエリを実行します。

> db.removeIdDemo.find({}, {_id: 0});

実行結果を見ると、_idフィールドが完全に取り除かれ、必要なフィールドだけが出力されています。

{ "UserName" : "John", "UserAge" : 23 }
{ "UserName" : "Mike", "UserAge" : 27 }
{ "UserName" : "Sam", "UserAge" : 34 }
{ "UserName" : "Carol", "UserAge" : 29 }

応用:特定フィールドだけを表示しつつ_idも除外する

射影は他のフィールド指定と組み合わせることも可能です。例えばUserNameのみを表示したい場合は以下のように書きます。

> db.removeIdDemo.find({}, {"UserName": 1, "_id": 0});
{ "UserName" : "John" }
{ "UserName" : "Mike" }
{ "UserName" : "Sam" }
{ "UserName" : "Carol" }

まとめ

MongoDBの検索結果から_idを削除したい場合は、find()の第2引数(射影)で{_id: 0}を指定します。_id以外のフィールドとは異なり、_idは明示的に0を指定しない限り常に返されるため、不要な場合には必ず意識して除外設定を行いましょう。

  1. MongoDBでコレクションから配列フィールド全体を削除するクエリの書き方

    MongoDBで配列フィールドを完全に削除するにはMongoDBのコレクションから、ドキュメント内の配列フィールドそのもの(フィールドごと)を取り除きたい場合は、更新演算子の $unset を使用します。$unset は指定したフィールドをドキュメントから削除する演算子で、配列の中身だけを空にするのではなく、フィールド自体が存在しない状態にできます。ここでは、サンプルコレクションを作成して、実際に配列フィールドを削除する手順を見ていきましょう。1. サンプルコレクションの作成まず、insertOne() メソッドを使ってドキュメントを挿入し、テスト用のコレクション demo609 を作成します

  2. MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説

    MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが