← К оглавлению занятия
⚡ Кратко: суть занятия
Revision 2 повторяет подключение MongoDB из Python и запросы к ich.Spotify_Youtube.
В Python используется pymongo: MongoClient, выбор базы, выбор коллекции, find, list(...), DataFrame и close.
Источник показывает read-only подключение к ich и пример подключения с правами редактирования к ich_edit.
Повторение MongoDB включает равенство по Artist, диапазоны Danceability/Tempo, логические $and, regex и $in/$all.
Aggregation-повторение перечисляет $match, $group, $project, $sort, $limit, $unwind, $lookup, $out, $geoNear, $bucket, $merge, $sample и $facet.
Фасетирование возвращает несколько независимых результатов, например AlbumTypes и avgEnergy.
Домашка 20 объединяет MySQL sakila и MongoDB restaurants.
Топ-3 ошибки: публиковать реальные пароли, путать regex /hot/ и /hot/i, забыть закрыть MongoClient.
Выполнимые примеры
Подключение и DataFrame
Пароли в примере заменены placeholders: реальные секреты не публикуйте.
from pymongo import MongoClient
import pandas as pd
client = MongoClient("mongodb://USER:PASSWORD@HOST:27017/?authSource=ich")
db = client["ich"]
collection = db["Spotify_Youtube"]
data = list(collection.find())
df = pd.DataFrame(data)
print(df.head())
client.close()
Artist Gorillaz
Базовое равенство по Artist.
db.Spotify_Youtube.find({ Artist: "Gorillaz" });
Диапазоны
Danceability и Tempo выбираются через $gt.
db.Spotify_Youtube.find({ Danceability: { $gt: 0.8 } });
db.Spotify_Youtube.find({ Tempo: { $gt: 130 } });
Energy и Valence
$and явно соединяет два условия.
db.Spotify_Youtube.find({
$and: [
{ Energy: { $gt: 0.7 } },
{ Valence: { $gt: 0.7 } }
]
});
Regex hot и Good
$all требует, чтобы оба regex-паттерна были применимы к полю Description.
db.Spotify_Youtube.find({ Description: { $all: [/hot/i, /Good/i] } });
Facet AlbumTypes и avgEnergy
Два результата возвращаются в одном документе.
db.Spotify_Youtube.aggregate([
{ $facet: {
AlbumTypes: [
{ $sortByCount: "$Album_type" },
{ $project: { _id: 0, type: "$_id", count: 1 } }
],
avgEnergy: [
{ $group: { _id: "$Album_type", avgEnergy: { $avg: "$Energy" } } },
{ $project: { _id: 0, type: "$_id", avgEnergy: 1 } }
]
} }
]);