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ýrVšimněte si, že jsme použili
findOne()
metoda. Tato technika nefunguje nafind()
metoda.findOne()
metoda vrací jeden dokument, zatímcofind()
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:
SPole 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