Поиск…


Вступление

Основные примеры запросов

Найти()

получить все документы в коллекции

db.collection.find({});

извлекать документы в коллекции, используя условие (подобное ГДЕ в MYSQL)

db.collection.find({key: value}); 
example
  db.users.find({email:"[email protected]"});

извлекать документы в коллекции с использованием булевых условий (операторы запросов)

//AND
db.collection.find( {
    $and: [
     { key: value }, { key: value } 
    ] 
})
//OR
db.collection.find( {
    $or: [
     { key: value }, { key: value } 
    ] 
})
//NOT
db.inventory.find( { key: { $not: value } } )

более логические операции и примеры можно найти здесь

ПРИМЕЧАНИЕ. Find () будет продолжать поиск в коллекции, даже если найдено совпадение с документом, поэтому оно неэффективно при использовании в большой коллекции, однако, тщательно моделируя ваши данные и / или используя индексы, вы можете повысить эффективность поиска ( )

FindOne ()

db.collection.findOne({});

функциональность запросов аналогична функции find (), но это прекратит выполнение в тот момент, когда он найдет один документ, соответствующий его условию, если используется с и пустым объектом, он будет извлекать первый документ и возвращать его. findOne () mongodb api документация

Документ запроса - использование условий AND, OR и IN

Все документы из коллекции students .

> db.students.find().pretty();

{
    "_id" : ObjectId("58f29a694117d1b7af126dca"),
    "studentNo" : 1,
    "firstName" : "Prosen",
    "lastName" : "Ghosh",
    "age" : 25
}
{
    "_id" : ObjectId("58f29a694117d1b7af126dcb"),
    "studentNo" : 2,
    "firstName" : "Rajib",
    "lastName" : "Ghosh",
    "age" : 25
}
{
    "_id" : ObjectId("58f29a694117d1b7af126dcc"),
    "studentNo" : 3,
    "firstName" : "Rizve",
    "lastName" : "Amin",
    "age" : 23
}
{
    "_id" : ObjectId("58f29a694117d1b7af126dcd"),
    "studentNo" : 4,
    "firstName" : "Jabed",
    "lastName" : "Bangali",
    "age" : 25
}
{
    "_id" : ObjectId("58f29a694117d1b7af126dce"),
    "studentNo" : 5,
    "firstName" : "Gm",
    "lastName" : "Anik",
    "age" : 23
}

Аналогичный mySql запрос указанной команды.

SELECT * FROM students;
db.students.find({firstName:"Prosen"});

{ "_id" : ObjectId("58f2547804951ad51ad206f5"), "studentNo" : "1", "firstName" : "Prosen", "lastName" : "Ghosh", "age" : "23" }

Аналогичный mySql запрос указанной команды.

SELECT * FROM students WHERE firstName = "Prosen";

И Запросы

db.students.find({
    "firstName": "Prosen",
    "age": {
        "$gte": 23
    }
});

{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }

Аналогичный mySql запрос указанной команды.

SELECT * FROM students WHERE firstName = "Prosen" AND age >= 23

Или Запросы

db.students.find({
     "$or": [{
         "firstName": "Prosen"
     }, {
         "age": {
             "$gte": 23
         }
     }]
 });

{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcb"), "studentNo" : 2, "firstName" : "Rajib", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcc"), "studentNo" : 3, "firstName" : "Rizve", "lastName" : "Amin", "age" : 23 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcd"), "studentNo" : 4, "firstName" : "Jabed", "lastName" : "Bangali", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dce"), "studentNo" : 5, "firstName" : "Gm", "lastName" : "Anik", "age" : 23 }

Аналогичный mySql запрос указанной команды.

SELECT * FROM students WHERE firstName = "Prosen" OR age >= 23

И ИЛИ Запросы

db.students.find({
        firstName : "Prosen",
        $or : [
            {age : 23},
            {age : 25}
        ]
});

{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }

Аналогичный mySql запрос указанной команды.

SELECT * FROM students WHERE firstName = "Prosen" AND age = 23 OR age = 25;

IN Запросы Эти запросы могут улучшить многократное использование OR запросов

db.students.find(lastName:{$in:["Ghosh", "Amin"]})

{ "_id" : ObjectId("58f29a694117d1b7af126dca"), "studentNo" : 1, "firstName" : "Prosen", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcb"), "studentNo" : 2, "firstName" : "Rajib", "lastName" : "Ghosh", "age" : 25 }
{ "_id" : ObjectId("58f29a694117d1b7af126dcc"), "studentNo" : 3, "firstName" : "Rizve", "lastName" : "Amin", "age" : 23 }

Аналогичный запрос mySql к команде выше

select * from students where lastName in ('Ghosh', 'Amin')

метод find () с проекцией

Основной синтаксис метода find() с проекцией следующий

> db.COLLECTION_NAME.find({},{KEY:1});

Если вы хотите показать все документы без поля возраста, то команда следующая:

db.people.find({},{age : 0});

Если вы хотите показать все документы в поле возраста, тогда команда следующая:

Метод Find () с проекцией

В MongoDB проекция означает выбор только необходимых данных, а не выбор целых данных документа.

Основной синтаксис метода find() с проекцией следующий

> db.COLLECTION_NAME.find({},{KEY:1});

Если вы хотите показать весь документ без поля возраста, то команда следующая:

> db.people.find({},{age:0});

Если вы хотите показать только возрастное поле, команда следующая:

> db.people.find({},{age:1});

Примечание. Поле _id всегда отображается при выполнении метода find() , если вы не хотите этого поля, тогда вам нужно установить его как 0 .

> db.people.find({},{name:1,_id:0});

Примечание: 1 используется для отображения поля, а 0 - для скрытия полей.

ограничивать, пропускать, сортировать и подсчитывать результаты метода find ()

Подобно методам агрегирования также методом find () у вас есть возможность ограничить, пропустить, отсортировать и подсчитать результаты. Скажем, мы имеем следующую коллекцию:

db.test.insertMany([
    {name:"Any", age:"21", status:"busy"}, 
    {name:"Tony", age:"25", status:"busy"}, 
    {name:"Bobby", age:"28", status:"online"}, 
    {name:"Sonny", age:"28", status:"away"}, 
    {name:"Cher", age:"20", status:"online"}
])

Чтобы перечислить коллекцию:

db.test.find({})

Вернусь:

{ "_id" : ObjectId("592516d7fbd5b591f53237b0"), "name" : "Any", "age" : "21", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b1"), "name" : "Tony", "age" : "25", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b2"), "name" : "Bobby", "age" : "28", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }

Пропустить первые 3 документа:

db.test.find({}).skip(3)

Вернусь:

{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }

Сортировка по имени поля:

db.test.find({}).sort({ "name" : -1})

Вернусь:

{ "_id" : ObjectId("592516d7fbd5b591f53237b1"), "name" : "Tony", "age" : "25", "status" : "busy" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b2"), "name" : "Bobby", "age" : "28", "status" : "online" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b0"), "name" : "Any", "age" : "21", "status" : "busy" }

Если вы хотите отсортировать по возрастанию, просто замените -1 на 1

Чтобы подсчитать результаты:

db.test.find({}).count()

Вернусь:

5

Также допускаются комбинации этих методов. Например, получите 2 документа из нисходящей сортированной коллекции, пропустив первый 1:

db.test.find({}).sort({ "name" : -1}).skip(1).limit(2)

Вернусь:

{ "_id" : ObjectId("592516d7fbd5b591f53237b3"), "name" : "Sonny", "age" : "28", "status" : "away" }
{ "_id" : ObjectId("592516d7fbd5b591f53237b4"), "name" : "Cher", "age" : "20", "status" : "online" }


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow