SQL
Помогите пожайлуста перевести из SQL в MongoDB
SELECT Students.Firstname, Students.Lastname FROM School INNER JOIN Students ON School.StudentID = Students.StudentID WHERE Students.Gender='F'
db.School.aggregate([
{
$lookup:
{
from: "Students",
localField: "StudentID",
foreignField: "StudentID",
as: "student_info"
}
},
{
$unwind: "$student_info"
},
{
$match: {"student_info.Gender": "F"}
},
{
$project:
{
"Firstname": "$student_info.Firstname",
"Lastname": "$student_info.Lastname"
}
}
])
{
$lookup:
{
from: "Students",
localField: "StudentID",
foreignField: "StudentID",
as: "student_info"
}
},
{
$unwind: "$student_info"
},
{
$match: {"student_info.Gender": "F"}
},
{
$project:
{
"Firstname": "$student_info.Firstname",
"Lastname": "$student_info.Lastname"
}
}
])
Владимир Vladimir
Спасибо!
В MongoDB запрос на выборку данных будет выглядеть следующим образом:
$lookup - присоединяет к коллекции School коллекцию Students, используя поле StudentID в обеих коллекциях.
$unwind - раскрывает массив students, полученный после присоединения коллекции Students.
$match - фильтрует только те документы, где Gender равен 'F'.
$project - выбирает поля Firstname и Lastname из students и убирает поле _id из результирующих документов.
Если вы используете библиотеку MongoDB для Python, то код для выполнения этого запроса может выглядеть примерно так:
db.School.aggregate([
{
$lookup: {
from: "Students",
localField: "StudentID",
foreignField: "StudentID",
as: "students"
}
},
{
$unwind: "$students"
},
{
$match: {
"students.Gender": "F"
}
},
{
$project: {
"students.Firstname": 1,
"students.Lastname": 1,
_id: 0
}
}
])
Этот запрос состоит из нескольких этапов: $lookup - присоединяет к коллекции School коллекцию Students, используя поле StudentID в обеих коллекциях.
$unwind - раскрывает массив students, полученный после присоединения коллекции Students.
$match - фильтрует только те документы, где Gender равен 'F'.
$project - выбирает поля Firstname и Lastname из students и убирает поле _id из результирующих документов.
Если вы используете библиотеку MongoDB для Python, то код для выполнения этого запроса может выглядеть примерно так:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
result = db.School.aggregate([
{
'$lookup': {
'from': 'Students',
'localField': 'StudentID',
'foreignField': 'StudentID',
'as': 'students'
}
},
{
'$unwind': '$students'
},
{
'$match': {
'students.Gender': 'F'
}
},
{
'$project': {
'students.Firstname': 1,
'students.Lastname': 1,
'_id': 0
}
}
])
for doc in result:
print(doc)
Если вы хотите перевести из SQL в MongoDB, то вам нужно знать не только синтаксис, но и логику обоих языков. Например, в SQL вы можете выбрать имена и фамилии студенток из школы с помощью внутреннего соединения таблиц. А в MongoDB вы должны использовать агрегацию и фильтрацию документов. Вот как это выглядит:
db.School.aggregate([
{$lookup: {
from: "Students",
localField: "StudentID",
foreignField: "StudentID",
as: "students"
}},
{$unwind: "$students"},
{$match: {"students.Gender": "F"}},
{$project: {
_id: 0,
Firstname: "$students.Firstname",
Lastname: "$students.Lastname"
}}
])
Но не думайте, что это все. Есть еще много тонкостей и различий между SQL и MongoDB, которые могут вас запутать или удивить. Например, вы знаете, что в MongoDB можно хранить массивы и объекты внутри документов? Или что в SQL можно использовать подзапросы и оконные функции? Или что в MongoDB есть оператор $lookup, который позволяет делать левые соединения? Или что в SQL есть оператор LIKE, который позволяет искать по шаблону? Или что в MongoDB есть оператор $regex, который позволяет использовать регулярные выражения? Или что в SQL есть оператор BETWEEN, который позволяет выбирать по диапазону? Или что в MongoDB есть оператор $elemMatch, который позволяет фильтровать по элементам массива? Или что в SQL есть оператор IN, который позволяет выбирать по списку значений? Или что в MongoDB есть оператор $in, который делает то же самое?
Ну, вы поняли. Перевод из SQL в MongoDB - это не просто замена слов на другие слова. Это целый процесс изучения и адаптации к новой парадигме работы с данными.
db.School.aggregate([
{$lookup: {
from: "Students",
localField: "StudentID",
foreignField: "StudentID",
as: "students"
}},
{$unwind: "$students"},
{$match: {"students.Gender": "F"}},
{$project: {
_id: 0,
Firstname: "$students.Firstname",
Lastname: "$students.Lastname"
}}
])
Но не думайте, что это все. Есть еще много тонкостей и различий между SQL и MongoDB, которые могут вас запутать или удивить. Например, вы знаете, что в MongoDB можно хранить массивы и объекты внутри документов? Или что в SQL можно использовать подзапросы и оконные функции? Или что в MongoDB есть оператор $lookup, который позволяет делать левые соединения? Или что в SQL есть оператор LIKE, который позволяет искать по шаблону? Или что в MongoDB есть оператор $regex, который позволяет использовать регулярные выражения? Или что в SQL есть оператор BETWEEN, который позволяет выбирать по диапазону? Или что в MongoDB есть оператор $elemMatch, который позволяет фильтровать по элементам массива? Или что в SQL есть оператор IN, который позволяет выбирать по списку значений? Или что в MongoDB есть оператор $in, который делает то же самое?
Ну, вы поняли. Перевод из SQL в MongoDB - это не просто замена слов на другие слова. Это целый процесс изучения и адаптации к новой парадигме работы с данными.
Владимир Vladimir
Спасибо, а если сделать без ключей?
Похожие вопросы
- Помогите написать sql запросы
- Помогите решить SQL задачки?
- SQL. Выводятся не все данные. 4 задача.
- Чем отличаются разные SQL?
- Не очень понятен синтаксис запросов SQL
- Вопрос по SQL. Помогите понять решение задачи
- Вопрос по SQL + Python
- Что делает кусок коды, выделенный синим? SQL
- Подскажите, есть ли такое понятие чистый SQL???
- Microsoft SQL. Процедура вывода максимального количества товаров за определенную сумму