Когато използвате методи като find()
или findOne()
в MongoDB, по подразбиране получавате върнати целия документ. И ако използвате прогнози, можете да върнете конкретни двойки ключ/стойност.
Но какво ще стане, ако искате само стойността?
Можете да извлечете стойността на поле, като добавите името на това поле към вашата заявка, когато използвате findOne()
.
Пример
Да предположим, че имаме колекция, наречена products
със следните документи:
{ "_id" :1, "продукт" :"Прилеп", "размери" :[ "S", "M", "L" ] }{ "_id" :2, "продукт" :"Шапка" , "размери" :[ "S", "L", "XL" ] }{ "_id" :3, "продукт" :"Капачка", "размери" :[ "M", "L" ] }предварително>Ако искаме да върнем продукта на първия документ, бихме могли да направим следното:
db.products.findOne().product
Резултат:
ПрилепИмайте предвид, че използвахме
findOne()
метод. Тази техника не работи сfind()
метод.findOne()
методът връща единичен документ, докатоfind()
метод просто връща курсор към документа.Ако искаме да върнем масива, можем да направим това:
db.products.findOne().sizes
Резултат:
[ "S", "M", "L" ]И можем да получим стойност на масива, като се позоваваме на неговия индекс:
db.products.findOne().sizes[0]
Резултат:
SМасивите са базирани на нула и така
0
препраща към първия елемент в масива,1
препраща към втория елемент,2
третият и т.н.Конкретен документ
По подразбиране
findOne()
метод връща първия документ в колекцията. Можем да изберем различен документ, като посочим подаване на заявка като първи аргумент.Казвам „първи аргумент“, защото
findOne()
приема същоprojection
аргумент като незадължителен втори аргумент.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
Резултат:
Куче