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