find()
などのメソッドを使用する場合 またはfindOne()
MongoDBでは、デフォルトでドキュメント全体が返されます。また、プロジェクションを使用する場合は、特定のキーと値のペアを返すことができます。
しかし、値だけが必要な場合はどうなりますか?
findOne()
を使用するときに、そのフィールドの名前をクエリに追加することで、フィールドの値を抽出できます。 。
例
products
というコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
最初のドキュメントの製品を返品したい場合は、次のようにすることができます。
db.products.findOne().product
結果:
Bat
findOne()
を使用したことに注意してください 方法。この手法は、find()
では機能しません 方法。 findOne()
メソッドは単一のドキュメントを返しますが、find()
メソッドは単にカーソルをドキュメントに返します。
配列を返したい場合は、次のようにすることができます:
db.products.findOne().sizes
結果:
[ "S", "M", "L" ]
そして、そのインデックスを参照することで配列値を取得できます:
db.products.findOne().sizes[0]
結果:
S
配列はゼロベースであるため、0
配列の最初の要素である1
を参照します 2番目の要素2
を参照します 3番目など。
特定のドキュメント
デフォルトでは、findOne()
メソッドは、コレクションの最初のドキュメントを返します。最初の引数としてクエリを渡すことを指定することで、別のドキュメントを選択できます。
findOne()
なので、「最初の引数」と言います projection
も受け入れます オプションの2番目の引数としての引数。
db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes
結果:
[ "S", "L", "XL" ]
この場合、射影引数を追加しましたが、結果には影響しませんでした。ただし、値0を指定した場合は効果があります。その場合、何も返されませんでした。
埋め込みドキュメント
ドット表記を使用して、埋め込まれたドキュメントから値を返すことができます
ドキュメントの例:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20 } }
埋め込まれたドキュメントから値を返すには、次のようにします。
db.pets.findOne().details.type
結果:
Dog