0
0

More than 3 years have passed since last update.

MongodbのfindOneで特定の要素だけ取り出す方法

Posted at

初めに

 ずいぶん前に質問していた内容を自己解決していたのにクローズし忘れていたということに今頃(数カ月後)になって気がついたため、折角だしその解決法を記事にまとめようと書いております。回答して下さった@anonymouさんほんとごめんなさい。それと回答してくれてありがとうございます!

バージョン

・Node.js      15.11.0
・MongoDB     4.4.6
・MongoDBドライバ 7.6.2

問題点

 そもそもの問題はfindOneの第2パラメータに値をセットしてみてもなぜだか動作しないというお話でした。

let result = await col.findOne({_id:~~~},{username:1});
//colにはdb.collectionでインスタントを定義済み。
//awaitはasync関数の中で実行しているという前提です。

 このプログラムの実行結果はusernameだけが表示されるというものです。もし仮にconsole.logした場合が以下の通り

//間違い表示例
{_id:~~~,username:'example',email:'e@example.com'}
//正しい表示例
{_id:~~~,username:'example'}

 本来であれば、usernameを1またはtrueと第2パラメータをおいたため、emailは表示されません。usernameだけを表示するという意思表示をしているためです。
 そしてこの間違い表示例の場合こそが、私が陥ったよくわからない状況です。
 このよくわからない状況に陥らなかった人は回れ右しても問題ないでしょう。もしくはバージョンアップしたーいって人は見てみても価値があります。

解決

 長い間公式のページを見てもさっぱり答えが分からなかったのですが、ある時たまたま見た海外のサイト(メモし忘れたためどこのサイトかは忘れた)で解決方法を見つけました。もし、私と同じようなバージョンでやっており、同じようなミスをしている人がいれば参考にしてほしいです。

let result = await col.findOne({_id:~~~},{projection:{username:1});

 projectionというキーを置く必要があったみたいです。
 それだけ!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0