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

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

MongoDBでは、ドキュメントを保存すると自動的に一意な識別子「_id」が付与されます。しかし、APIレスポンスや画面表示などでこの _id を含めたくないケースはよくあります。そのような場合は、find() の第2引数にプロジェクション(取得フィールドの指定)を渡し、「_id: false」を設定することで簡単に除外できます。

基本構文

db.yourCollectionName.find({},{'_id': false}).pretty();

find() の第1引数は検索条件、第2引数がプロジェクションです。「'_id': false」を指定すると、その他のフィールドはすべて取得しつつ、_id だけを出力結果から除外できます。

サンプルコレクションの作成

実際の動作を確認するため、まずドキュメントを含むコレクションを作成しましょう。以下のクエリを実行します。

> db.removingidElementDemo.insertOne({"UserName":"John", "UserAge":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9153fd4afe5c1d2279d6ad")
}
> db.removingidElementDemo.insertOne({"UserName":"Carol", "UserAge":24});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9154084afe5c1d2279d6ae")
}
> db.removingidElementDemo.insertOne({"UserName":"David", "UserAge":22});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9154154afe5c1d2279d6af")
}
> db.removingidElementDemo.insertOne({"UserName":"Mike", "UserAge":26});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9154204afe5c1d2279d6b0")
}
> db.removingidElementDemo.insertOne({"UserName":"Chris", "UserAge":20});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c91542c4afe5c1d2279d6b1")
}

すべてのドキュメントを表示する

find() メソッドを使うと、コレクション内の全ドキュメントを取得して表示できます。

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

実行結果は以下のとおりです。各ドキュメントに _id が含まれているのがわかります。

{
    "_id" : ObjectId("5c9153fd4afe5c1d2279d6ad"),
    "UserName" : "John",
    "UserAge" : 21
}
{
    "_id" : ObjectId("5c9154084afe5c1d2279d6ae"),
    "UserName" : "Carol",
    "UserAge" : 24
}
{
    "_id" : ObjectId("5c9154154afe5c1d2279d6af"),
    "UserName" : "David",
    "UserAge" : 22
}
{
    "_id" : ObjectId("5c9154204afe5c1d2279d6b0"),
    "UserName" : "Mike",
    "UserAge" : 26
}
{
    "_id" : ObjectId("5c91542c4afe5c1d2279d6b1"),
    "UserName" : "Chris",
    "UserAge" : 20
}

_idを除外して取得する

_id を除外してドキュメントを取得するには、次のクエリを実行します。

> db.removingidElementDemo.find({},{'_id': false}).pretty();

実行結果を見ると、_id が取り除かれ、それ以外のフィールドだけが出力されていることが確認できます。

{ "UserName" : "John", "UserAge" : 21 }
{ "UserName" : "Carol", "UserAge" : 24 }
{ "UserName" : "David", "UserAge" : 22 }
{ "UserName" : "Mike", "UserAge" : 26 }
{ "UserName" : "Chris", "UserAge" : 20 }

PyMongo(Python)から実行する場合

PythonのPyMongoライブラリから同じ操作を行いたい場合は、次のように記述します。

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["yourDatabase"]

for doc in db["removingidElementDemo"].find({}, {"_id": False}):
    print(doc)

出力結果:

{'UserName': 'John', 'UserAge': 21}
{'UserName': 'Carol', 'UserAge': 24}
{'UserName': 'David', 'UserAge': 22}
{'UserName': 'Mike', 'UserAge': 26}
{'UserName': 'Chris', 'UserAge': 20}

まとめ

プロジェクションで「_id: False」を指定するだけで、検索結果から _id フィールドを除外できます。なお、MongoDBでは通常、_id 以外のフィールドを明示的に指定しない限りデフォルトでは返されませんが、_id だけは例外として常に返される仕様になっています。そのため、非表示にしたい場合は必ず明示的に False を指定する必要がある点に注意してください。

  1. Deapデータ構造における最小要素の削除方法

    はじめに本記事では、Deapデータ構造から最小要素を削除する手法について詳しく解説します。Deap(Double-Ended Heap)は、最小ヒープ(min-heap)と最大ヒープ(max-heap)を1つの完全二分木で実現したデータ構造です。左側の部分木が最小ヒープ、右側の部分木が最大ヒープとして機能するため、最小値と最大値の両方に効率的にアクセスできます。削除操作では、主な目的はDeap内の最小値を取り除くことです。最小値は必ず最小部分木の根(配列のインデックス2の位置)に格納されているため、その位置の要素を取り出すことになります。木の高さは常に log n 程度であるため、削除操作にか

  2. 間隔ヒープから最小要素を削除する手順をわかりやすく解説

    間隔ヒープ(interval heap)は、各ノードが左端点と右端点からなる区間を持つデータ構造で、左端点の集合が最小ヒープとして、右端点の集合が最大ヒープとして機能します。ここでは、間隔ヒープから最小要素を削除する手順について詳しく解説します。 削除操作の基本ステップ 間隔ヒープにおいて、最小要素は根ノードの左側に格納されています。削除操作では、まずこの要素を取り出して呼び出し元に返します。 根ノードの左側にできた空きを埋めるため、最後のノードから要素を取り出し、根ノードへ挿入します。 この要素は、下層へ向かう各ノードの左側の要素と順番に比較され、間隔ヒープの条件がすべて満たされた時点で