English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой главе мы изучим, как запрашивать документы из коллекции MongoDB.
Чтобы запросить данные из коллекции MongoDB, вам нужно использовать методfind()метод.
find()Основная грамматика метода такая:
> db.COLLECTION_NAME.find()
find() метод будет отображать все документы в неструктурированном формате.
предположим, что мы уже создали коллекцию с именем mycol-
> use sampleDB перешли на db sampleDB > db.createCollection("mycol") {"ok": 1} >
Используя метод insert() вставьте 3 документа, как показано ниже-
> db.mycol.insert([ { title: "MongoDB Overview", description: "MongoDB is not a SQL database", by: "Basic Tutorial", url: "http://ru.oldtoolbag.com", tags: ["mongodb", "database", "NoSQL"], likes: 100 }, { title: "NoSQL Database", description: "NoSQL databases do not have tables", by: "Basic Tutorial", url: "http://ru.oldtoolbag.com", tags: ["mongodb", "database", "NoSQL"], likes: 20, comments: [ { user: "user1", message: "My first comment", dateCreated: new Date(2013,11,10,2,35), like: 0 } ] } ]
The following method retrieves all documents in the collection -
> db.mycol.find() {"_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Overview", "description" : "MongoDB is not a SQL database", "by" : "Basic Tutorial", "url" : "http://ru.oldtoolbag.com", "tags" : ["mongodb", "database", "NoSQL"], "likes" : 100} {"_id" : ObjectId("5dd4e2cc0821d3b44607534d"), "title" : "NoSQL Database", "description" : "NoSQL databases do not have tables", "by" : "Basic Tutorial", "url" : "http://ru.oldtoolbag.com", "tags" : ["mongodb", "database", "NoSQL"], "likes" : 20, "comments" : [{ "user" : "user1", "message" : "My first comment", "dateCreated" : new Date(2013,11,10,2,35), "like" : 0 }]} >
Для форматирования результатов можно использовать метод pretty().
> db.COLLECTION_NAME.find().pretty()
Ниже приведен пример поиска всех документов из коллекции с именем mycol и их отображения в удобочитаемом формате.
> db.mycol.find().pretty() { "_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Overview", "description" : "MongoDB не является SQL-базой данных", "by" : "基础教程", "url": "http://ru.oldtoolbag.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } { "_id": ObjectId("5dd4e2cc0821d3b44607534d"), "title": "NoSQL Database", "description": "NoSQL-база данных не имеет таблиц", "by" : "基础教程", "url": "http://ru.oldtoolbag.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes": 20, "comments": [ { "user": "user1", "message": "My first comment", "dateCreated": ISODate("2013-12-09T21:05:00Z"), "like": 0 } ] }
Кроме метода find(), существует ещеfindOne()Метод возвращает только один документ.
> db.COLLECTIONNAME.findOne()
Ниже приведен пример поиска документа с заголовком MongoDB Overview.
> db.mycol.findOne({title: "MongoDB Overview"}) { "_id": ObjectId("5dd6542170fb13eec3963bf0"), "title" : "MongoDB Overview", "description" : "MongoDB не является SQL-базой данных", "by" : "基础教程", "url": "http://ru.oldtoolbag.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
Чтобы выполнить запрос на документ по определенным условиям, можно использовать следующие операции.
Операции | Формат | Пример | Аналогичные предложения в RDBMS |
---|---|---|---|
Равно | {<key>:<value>} | db.col.find({"by":"基础教程"}).pretty() | where by = '基础教程' |
Меньше | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
Меньше или равно | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
Больше | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
Больше или равно | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
Не равно | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
Значение находится в массиве | {<key>:{$in:[<value1>, <value2>,……<valueN>]}} | db.mycol.find({"name":{$in:["Raj", "Ram", "Raghu"]}}).pretty() | Где name соответствует любому из значений :["Raj", "Ram", "Raghu"] |
Значение не находится в массиве | {<key>:{$nin:<value>}} | db.mycol.find({"name":{$nin:["Ramu", "Raghav"]}}).pretty() | Значение name не находится в массиве :["Ramu", "Raghav"] или оно根本 не существует |
Чтобы выполнить запрос на основе условия AND, вам нужно использовать ключевое слово $and. Вот базовая грамматика AND:
db.mycol.find({ $and: [ {<key1>:<value1>}, { <key2>:<value2>} ] })
ниже приведен пример, который покажет все учебные материалы, написанные '基础教程' и имеющие заголовок 'MongoDB Overview'.
> db.mycol.find({$and:[{"by":"基础教程"},{"title": "MongoDB Overview"}]}).pretty() { "_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Overview", "description" : "MongoDB не является SQL-базой данных", "by" : "基础教程", "url" : "https://ru.oldtoolbag.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >
Для примера, приведенного выше, эквивалентным where-предложением будет' where by = '基础教程' AND title = 'MongoDB Overview' '. Вы можете передать в подзапрос find любое количество пар ключ-значение.
Чтобы выполнить поиск документов на основе условия 'ИЛИ', необходимо использовать$orключевые слова. ВотИЛИбазовая грамматика:
>db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
ниже приведен пример, который покажет все учебные материалы, написанные 'tutorials point' или имеющие заголовок 'MongoDB Overview'.
>db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty() { "_id": ObjectId(7df78ad8902c), "title": "MongoDB Overview", "description": "MongoDB не является SQL-базой данных", "by": "базовый учебник", "url": "http://ru.oldtoolbag.com", "tags": ["mongodb", "database", "NoSQL"], "likes": "100" } >
ниже приведен пример документа, у которого количество лайков (likes) больше 10 и заголовок (title) равен 'MongoDB概述' или 'by' равно '基础教程'. Это эквивалентно SQL where-предложению 'where likes>10 AND (by = '基础教程' OR title = 'MongoDB概述')'
db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"}, {"title": "MongoDB Overview"}]}).pretty() { "_id": ObjectId(7df78ad8902c), "title": "Обзор MongoDB", "description": "MongoDB не является SQL-базой данных", "by": "базовый учебник", "url": "http://ru.oldtoolbag.com", "tags": ["mongodb", "database", "NoSQL"], "likes": "100" } >
Чтобы выполнить запрос на документ по условию NOR, нужно использовать ключевое слово $nor. ВотNORбазовая грамматика:
> db.COLLECTION_NAME.find( { $nor: [ {key1: value1}, {key2:value2} ] } )
предположим, что мы работаем с集合 empDetails вставлены 3 документа, как показано ниже-
db.empDetails.insertMany( [ { First_Name: "Radhika", Last_Name: "Sharma", Age: "26", e_mail: "[email protected]", phone: "9000012345" }, { First_Name: "Rachel", Last_Name: "Christopher", Age: "27", e_mail: "[email protected]", phone: "9000054321" }, { First_Name: "Fathima", Last_Name: "Sheik", Age: "24", e_mail: "[email protected]", phone: "9000054321" } ] )
Следующий пример будет искать документы, имена которых не "Radhika", и не "Christopher"
> db.empDetails.find( { $nor: [ 40 {"First_Name": "Radhika"}, {"Last_Name": "Christopher"} ] } ).pretty() { "_id": ObjectId("5dd631f270fb13eec3963bef"), "First_Name" : "Fathima", "Last_Name" : "Sheik", "Age" : "24", "e_mail" : "[email protected]", "phone" : "9000054321" }
Чтобы выполнить запрос на документ по условию NOT, вам нужно использовать ключевое слово $not, вотNOTОсновная грамматика:
> db.COLLECTION_NAME.find( { $NOT: [ {key1: value1}, {key2:value2} ] } ).pretty()
Следующий пример будет检索ать документы, возраст которых не превышает 25 лет
> db.empDetails.find({"Age": {$not: {$gt: "25"}}}) { "_id" : ObjectId("5dd6636870fb13eec3963bf7"), "First_Name" : "Fathima", "Last_Name" : "Sheik", "Age" : "24", "e_mail" : "[email protected]", "phone" : "9000054321" }