Když používáte metody jako find() nebo findOne() v MongoDB se ve výchozím nastavení vrátí celý dokument. A pokud používáte projekce, můžete vrátit konkrétní páry klíč/hodnota.
Ale co když chcete pouze hodnotu?
Hodnotu pole můžete extrahovat připojením názvu tohoto pole k dotazu při použití findOne() .
Příklad
Předpokládejme, že máme kolekci nazvanou products s následujícími dokumenty:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Klobouk" , "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "produkt" :"Kšiltovka", "velikosti" :[ "M", "L" ] }
Pokud bychom chtěli vrátit produkt prvního dokumentu, mohli bychom udělat následující:
db.products.findOne().product
Výsledek:
Netopýr
Všimněte si, že jsme použili findOne() metoda. Tato technika nefunguje na find() metoda. findOne() metoda vrací jeden dokument, zatímco find() metoda pouze vrátí kurzor do dokumentu.
Pokud bychom chtěli vrátit pole, mohli bychom udělat toto:
db.products.findOne().sizes
Výsledek:
[ "S", "M", "L" ]
A můžeme získat hodnotu pole odkazem na jeho index:
db.products.findOne().sizes[0]
Výsledek:
S
Pole jsou založeny na nule, a tedy 0 odkazuje na první prvek v poli, 1 odkazuje na druhý prvek, 2 třetí a tak dále.
Konkrétní dokument
Ve výchozím nastavení findOne() metoda vrací první dokument v kolekci. Můžeme vybrat jiný dokument zadáním předání dotazu jako prvního argumentu.
Říkám „první argument“, protože findOne() také přijímá projection argument jako volitelný druhý argument.
db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes
Výsledek:
[ "S", "L", "XL" ]
V tomto případě jsem přidal argument projekce, ale na výsledek to nemělo žádný vliv. Ale mělo by to vliv, kdybych zadal hodnotu 0. To by vedlo k tomu, že by se nic nevrátilo.
Vložené dokumenty
K vrácení hodnot z vložených dokumentů můžete použít tečkovou notaci
Příklad dokumentu:
{ "_id" :1, "name" :"Wag", "detaily" :{ "type" :"Pes", "weight" :20 }}
Pro vrácení hodnoty z vloženého dokumentu můžeme provést následující:
db.pets.findOne().details.type
Výsledek:
Pes