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 を指定する必要がある点に注意してください。
-
Deapデータ構造における最小要素の削除方法
はじめに本記事では、Deapデータ構造から最小要素を削除する手法について詳しく解説します。Deap(Double-Ended Heap)は、最小ヒープ(min-heap)と最大ヒープ(max-heap)を1つの完全二分木で実現したデータ構造です。左側の部分木が最小ヒープ、右側の部分木が最大ヒープとして機能するため、最小値と最大値の両方に効率的にアクセスできます。削除操作では、主な目的はDeap内の最小値を取り除くことです。最小値は必ず最小部分木の根(配列のインデックス2の位置)に格納されているため、その位置の要素を取り出すことになります。木の高さは常に log n 程度であるため、削除操作にか
-
間隔ヒープから最小要素を削除する手順をわかりやすく解説
間隔ヒープ(interval heap)は、各ノードが左端点と右端点からなる区間を持つデータ構造で、左端点の集合が最小ヒープとして、右端点の集合が最大ヒープとして機能します。ここでは、間隔ヒープから最小要素を削除する手順について詳しく解説します。 削除操作の基本ステップ 間隔ヒープにおいて、最小要素は根ノードの左側に格納されています。削除操作では、まずこの要素を取り出して呼び出し元に返します。 根ノードの左側にできた空きを埋めるため、最後のノードから要素を取り出し、根ノードへ挿入します。 この要素は、下層へ向かう各ノードの左側の要素と順番に比較され、間隔ヒープの条件がすべて満たされた時点で