Skip to content

Для создания коллекции документов для базы данных MongoDB на Java, вы можете использовать библиотеку MongoDB Java Driver. Ниже приведен пример кода, который создает коллекцию из 8 документов с рандомными значениями для указанных полей.

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import org.bson.types.ObjectId;

import java.time.LocalDate;
import java.util.Map;
import java.util.Random;

public class MongoDBExample {
    public static void main(String[] args) {
        // Подключение к MongoDB
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("yourDatabaseName");
        MongoCollection<Document> collection = database.getCollection("yourCollectionName");

        // Генерация 8 документов
        for (int i = 0; i < 8; i++) {
            Document todoDocument = createRandomDocument();
            collection.insertOne(todoDocument);
        }

        // Закрытие подключения
        mongoClient.close();
    }

    private static Document createRandomDocument() {
        Random random = new Random();
        String[] firstNames = {"Steven", "John", "Jane", "Alice", "Bob", "Charlie", "Diana", "Eve"};
        String[] lastNames = {"King", "Doe", "Smith", "Johnson", "Brown", "Williams", "Jones", "Garcia"};
        String[] jobIds = {"AD_PRES", "IT_PROG", "HR_REP", "SA_REP", "MK_MAN", "FI_MGR", "AC_MGR", "PR_REP"};

        String firstName = firstNames[random.nextInt(firstNames.length)];
        String lastName = lastNames[random.nextInt(lastNames.length)];
        String email = firstName.charAt(0) + lastName.toLowerCase() + "@example.com";
        String phoneNumber = String.format("%d.%d.%d", random.nextInt(900) + 100, random.nextInt(900) + 100, random.nextInt(9000) + 1000);
        LocalDate hireDate = LocalDate.of(1987, random.nextInt(12) + 1, random.nextInt(28) + 1);
        String jobId = jobIds[random.nextInt(jobIds.length)];
        int salary = (random.nextInt(10) + 1) * 10000;

        return new Document(Map.of(
                "_id", new ObjectId(),
                "FIRST_NAME", firstName,
                "LAST_NAME", lastName,
                "EMAIL", email,
                "PHONE_NUMBER", phoneNumber,
                "HIRE_DATE", hireDate,
                "JOB_ID", jobId,
                "SALARY", salary
        ));
    }
}

Объяснение кода:

Подключение к MongoDB: Используется MongoClients.create() для подключения к локальной базе данных MongoDB.
Создание коллекции: Получаем доступ к нужной базе данных и коллекции.
Генерация документов: В цикле создаются 8 документов с помощью метода createRandomDocument(), который генерирует случайные значения для каждого поля.
Закрытие подключения: После завершения работы с базой данных, соединение закрывается.

Зависимости:

Не забудьте добавить зависимости для MongoDB Java Driver в ваш проект. Если вы используете Maven, добавьте следующий код в ваш pom.xml:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.6.0</version> <!-- Убедитесь, что используете последнюю версию -->
</dependency>

Этот код создаст 8 документов с рандомными значениями и вставит их в указанную коллекцию в MongoDB.

Напишите запрос MongoDB для отображения ФИО и даты рождения всех лиц из представленной колекции


Для отображения ФИО (фамилия, имя, отчество) и даты рождения всех лиц из коллекции в MongoDB, вы можете использовать метод find() с проекцией. Предположим, что в вашей коллекции поля для имени, фамилии и даты рождения называются FIRST_NAME, LAST_NAME и HIRE_DATE соответственно.

Вот пример запроса на MongoDB:

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;

public class MongoDBQueryExample {
    public static void main(String[] args) {
        // Подключение к MongoDB
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("yourDatabaseName");
        MongoCollection<Document> collection = database.getCollection("yourCollectionName");

        // Выполнение запроса
        MongoCursor<Document> cursor = collection.find()
            .projection(Projections.fields(
                Projections.excludeId(),
                Projections.computed("FULL_NAME", 
                    new Document("$concat", Arrays.asList("$FIRST_NAME", " ", "$LAST_NAME"))),
                Projections.include("HIRE_DATE")
            )).iterator();

        // Обработка результатов
        while (cursor.hasNext()) {
            Document doc = cursor.next();
            System.out.println(doc.toJson());
        }

        // Закрытие подключения
        mongoClient.close();
    }
}

Объяснение кода:

Используется Projections для создания проекции, аналогичной той, что была описана в запросе MongoDB.
Projections.computed используется для создания нового поля FULL_NAME с помощью оператора $concat.
Результаты выводятся в формате JSON.

Для отображения всех работников из коллекции и сортировки их по заработной плате в порядке уменьшения, вы можете использовать метод find() с сортировкой. В MongoDB это делается с помощью метода sort().

Вот пример кода на Java, который выполняет этот запрос:

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;
import static com.mongodb.client.model.Sorts.*;

public class MongoDBSortExample {
    public static void main(String[] args) {
        // Подключение к MongoDB
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("yourDatabaseName");
        MongoCollection<Document> collection = database.getCollection("yourCollectionName");

        // Выполнение запроса с сортировкой по заработной плате в порядке убывания
        MongoCursor<Document> cursor = collection.find()
            .sort(descending("SALARY")) // Сортировка по полю SALARY в порядке убывания
            .iterator();

        // Обработка результатов
        while (cursor.hasNext()) {
            Document doc = cursor.next();
            System.out.println(doc.toJson());
        }

        // Закрытие подключения
        mongoClient.close();
    }
}

Объяснение кода:

Подключение к MongoDB: Используется MongoClients.create() для подключения к локальной базе данных MongoDB.
Получение коллекции: Получаем доступ к нужной базе данных и коллекции.
Запрос с сортировкой:
    collection.find(): Получаем все документы из коллекции.
    .sort(descending("SALARY")): Сортируем результаты по полю SALARY в порядке убывания.
Обработка результатов: В цикле выводим каждый документ в формате JSON.
Закрытие подключения: После завершения работы с базой данных, соединение закрывается.

Для вычисления средней зарплаты всех работников в MongoDB вы можете использовать агрегатный запрос с оператором $group. Этот оператор позволяет группировать документы и выполнять вычисления, такие как подсчет средней зарплаты.

Вот пример кода на Java, который выполняет этот запрос:

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Accumulators;
import org.bson.Document;

import java.util.Arrays;

public class MongoDBAverageSalaryExample {
    public static void main(String[] args) {
        // Подключение к MongoDB
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("yourDatabaseName");
        MongoCollection<Document> collection = database.getCollection("yourCollectionName");

        // Выполнение агрегатного запроса для вычисления средней зарплаты
        Document averageSalary = collection.aggregate(Arrays.asList(
                Aggregates.group(null, Accumulators.avg("averageSalary", "$SALARY"))
        )).first();

        // Вывод средней зарплаты
        if (averageSalary != null) {
            System.out.println("Средняя зарплата всех работников: " + averageSalary.getDouble("averageSalary"));
        } else {
            System.out.println("Нет данных для вычисления средней зарплаты.");
        }

        // Закрытие подключения
        mongoClient.close();
    }
}

Объяснение кода:

Подключение к MongoDB: Используется MongoClients.create() для подключения к локальной базе данных MongoDB.
Получение коллекции: Получаем доступ к нужной базе данных и коллекции.
Агрегатный запрос:
    collection.aggregate(...): Выполняем агрегатный запрос.
    Aggregates.group(null, Accumulators.avg("averageSalary", "$SALARY")): Группируем все документы (передаем null в качестве первого аргумента) и вычисляем среднюю зарплату с помощью оператора $avg.
Вывод результата: Если результат не равен null, выводим среднюю зарплату. В противном случае выводим сообщение о том, что нет данных.
Закрытие подключения: После завершения работы с базой данных, соединение закрывается.
System.out.println("Напишите запрос MongoDB для отображения всех данных из представленной таблицы");
            todoCollection.find()
                    .forEach((Consumer<Document>) System.out::println);

мой пример

https://gitlab.com/synergy9980417/razdel2/6_5_mongo