Примечания по обучению Mongodb (3) – общие команды запросов оболочки Mongo
Версия Mongodb, используемая в этой статье, – 4.0.10
> db.version(); 4.0.10
1, Найти команду для простого запроса
Find (query criteria, returned fields),
1. Возвращайте все поля при запросе
ДБ. Пользователь. Найти() — > запрашивает все данные в коллекции пользователей
> db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
ДБ. Пользователь. Найти ({“имя пользователя”: “Мэри”}) — > перечислить данные
> db.user.find({"username": "Mary"}) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
ДБ. Пользователь. Найти ({“возраст”: 50}) — > список данных с
> db.user.find( {"age":50} ) { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
2. Во время запроса возвращается только несколько указанных полей
ДБ. Пользователь. Найти ({}, {“имя пользователя”: 1}) — > Перечислить все поля имени пользователя
> db.user.find({}, {"username": 1}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary" } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin" } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart" }
ДБ. Пользователь. Найти ({}, {“Тел”: 1}) — > перечислить все поля Тел людей
> db.user.find({}, {"tel": 1}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7") } { "_id" : ObjectId("5d2f103414077ad0dab139c8") } { "_id" : ObjectId("5d2f105414077ad0dab139c9") }
ДБ. Пользователь. Найти ({}, {“возраст”: 0}) — > перечислены все поля, кроме поля возраст
> db.user.find({}, {"age": 0}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary" } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin" } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart" }
2, Общие операторы
1. $lt (<)
Запрашивать пользователей моложе 30 лет
> db.user.find( {"age": { $lt: 30 } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" }
2. $lte (<=)
Запрашивайте пользователей в возрасте до 30 лет или старше
> db.user.find( {"age": { $lte: 30 } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
3. $gt (>)
Запрашивайте пользователей старше 30 лет
> db.user.find( {"age": { $gt: 30 } } ) { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
4. $gte (>= )
Запрашивайте пользователей старше 30 лет или старше
> db.user.find( {"age": { $gte: 30 } } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
5. $ne ( <> )
Запрашивайте пользователей, чей возраст не равен 30
> db.user.find( {"age": { $ne: 30 } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
6. $и (И)
Запрашивайте пользователей старше 10 и моложе 40 лет
> db.user.find( { $and: [ { "age": { $lt: 40 } } , {"age": { $gt: 10 } } ] } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }
7. $или (ИЛИ)
Запрашивайте пользователей моложе 20 или старше 40 лет
> db.user.find( { $or: [ { "age": { $lt: 20 } } , {"age": { $gt:40 } } ] } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
8. $в (В)
Запрашивайте пользователей в возрасте 20, 30, 40 лет
> db.user.find( { "age" : { $in : [20, 30, 40] } } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
9. $не (НЕ)
Запрашивайте пользователей, которым не исполнилось 20 или 40 лет ($нет)
> db.user.find( { "age" : { $not: { $in : [20, 40] } } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
10. $nin (НЕ В)
Запрашивайте пользователей, которым нет 20 или 40 лет
> db.user.find( { "age" : { $nin : [20, 40] } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
11. $mod (удаление плесени)
Запрос пользователей возрастной пары 4 с модулем 2
> db.user.find( {"age" : { $mod : [4, 2] } } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
12. $существует
$exists используется для определения того, является ли ключ
Добавьте поле Tel в Mary со значением, равным null
> db.user.update({ "username": "Mary" }, { $set : { "tel" : null } }) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
Список записей с полями Тел
> db.user.find({ "tel" : { $exists : 1 }}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }
Обратите внимание, когда значение суждения равно null: db.user.find({ "друзья": null })
Эта команда находит не только запись с нулевым значением, но и запись без ключа друзей.
> db.user.find({ "tel" : null }) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
Если вы хотите удалить записи с ключом друзей и нулевым значением, вам следует использовать их следующим образом:
> db.user.find( { $and: [ { "tel" : null }, { "tel" : {$exists: 1 } } ] } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }
13. $где
$где: определите, следует ли возвращать данные в соответствии с возвращаемым значением функции
вытащить Возраст * 3 + 5 менее 100 лет Пользователь
db.user.find( { $where : function(){ return (this.age * 3 + 5 < 100); } } );
> db.user.find( { $where : function(){ return (this.age * 3 + 5 < 100); } } ); { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }
это
Представляет текущую запись.
С помощью этого $where вы можете реализовать практически любой тип запроса. Но не используйте этот метод, когда в этом нет необходимости, потому что он намного медленнее, чем общие запросы.
3. Использование регулярных запросов
Найдите записи с надписью “искусство” в их названиях
> db.user.find( { "username" : /art/ } ) { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
Найдите записи без учета регистра с именами, начинающимися на “Mar”.
> db.user.find( {"username": /^mar/i } ); { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
4, Массив запросов
1. $все: при оценке нескольких заданных значений, содержащихся в поле типа массива.
Добавьте несколько друзей к пользователям в коллекцию пользователей. Результаты заключаются в следующем:
> db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086", "friend" : [ "Mary", "Jocker", "Martin", "Kart" ] } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null, "friend" : [ "Jocker", "Martin" ] } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40, "friend" : [ "Mary", "Jocker", "Kart" ] } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
Достаньте записи Мэри и Джокера из массива друзей
> db.user.find({ "friend": { $all : ["Mary", "Jocker"] } }) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086", "friend" : [ "Mary", "Jocker", "Martin", "Kart" ] } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40, "friend" : [ "Mary", "Jocker", "Kart" ] }
2. $size: запрос массива с указанным количеством элементов
Извлеките запись с тремя значениями в массиве друзей
> db.user.find( { "friend" : { $size : 3 } } ) { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40, "friend" : [ "Mary", "Jocker", "Kart" ] }
3. $slice: возвращает подмножество массива
{$slice: 10} — > 10 лучших в массиве {$slice: – 10} — > последние 10 в массиве {$slice: [20, 10]} — > начните с элемента с индексом 20 в массиве и удалите 10 элементов назад
Уберите первых трех друзей Тома
> db.user.find( {"username": "Tom"}, { "friend" : {$slice : 3} } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086", "friend" : [ "Mary", "Jocker", "Martin" ] }
5、 Запрос встроенных документов
1. $Соответствие элементов
Если такая структура данных существует: Существует поле комментариев, которое представляет собой массив, и каждый элемент является встроенным объектом комментариев
{ "_id": ObjectId("5d31b1d24fd0d7ad0a1a1361"), "author": "Tom", "content": "I am Tom!", "comments": [{ "user": "Mary", "score": 3, "comment": "Nice!" }, { "user": "Martin", "score": 6, "comment": "I'm reading..." }, { "user": "Jocker", "score": 8, "comment": "You're kidding me" }] } { "_id": ObjectId("5d31b3114fd0d7ad0a1a1364"), "author": "Martin", "content": "I am Martin!", "comments": [{ "user": "Tom", "score": 5, "comment": "Nice!" }, { "user": "Mary", "score": 6, "comment": "I'm reading..." }, { "user": "Jocker", "score": 3, "comment": "You're kidding me" }] } { "_id": ObjectId("5d31b3314fd0d7ad0a1a1365"), "author": "Mary", "content": "I am Mary!", "comments": [{ "user": "Tom", "score": 3, "comment": "Nice!" }, { "user": "Martin", "score": 5, "comment": "I'm reading..." }, { "user": "Jocker", "score": 2, "comment": "You're kidding me" }] }
Запрашивайте комментарии для записей статей с оценкой более 5
> db.blog.find ({ "comments" : { "$elemMatch" : { "score" : {"$gt" : 5}}} }) { "_id" : ObjectId("5d31b1d24fd0d7ad0a1a1361"), "author" : "Tom", "content" : "I am Tom!", "comments" : [ { "user" : "Mary", "score" : 3, "comment" : "Nice!" }, { "user" : "Martin", "score" : 6, "comment" : "I'm reading..." }, { "user" : "Jocker", "score" : 8, "comment" : "You're kidding me" } ] } { "_id" : ObjectId("5d31b3114fd0d7ad0a1a1364"), "author" : "Martin", "content" : "I am Martin!", "comments" : [ { "user" : "Tom", "score" : 5, "comment" : "Nice!" }, { "user" : "Mary", "score" : 6, "comment" : "I'm reading..." }, { "user" : "Jocker", "score" : 3, "comment" : "You're kidding me" } ] }
Запросите комментарии Тома со счетом более 5
> db.blog.find ({"author": "Tom"}, { "comments" : { "$elemMatch" : { "score" : {"$gt" : 3}}} }) { "_id" : ObjectId("5d31b1d24fd0d7ad0a1a1361"), "comments" : [ { "user" : "Martin", "score" : 6, "comment" : "I'm reading..." } ] }