Маршруты MongoDB CRUD, возвращающие нулевые или неправильные значения - PullRequest
0 голосов
/ 07 марта 2020

Я недавно начал использовать стек MEAN и наткнулся на некоторые ошибки, пытаясь работать с моей базой данных MongoDB. Я успешно подключился к базе данных, внедрил свои маршруты CRUD и получаю неправильные значения для чего-либо, кроме метода find () (который возвращает все документы в моей коллекции без проблем). Например, findOne () выглядит следующим образом:

router.route(server.get("/company/:id", (request, response) => {
        const companyId = request.params.id;
        console.log("Showing company with id: " + companyId)

        dbCollection.findOne({ _id: mongodb.ObjectId(companyId) }, (error, result) => {
            if (error) throw error;
            // return company
            response.json(result);
        });
    }));

Результат после выполнения запроса на получение через почтальон: null

The insertOne () выглядит следующим образом:

router.route(server.post("/company/add", (request, response) => {
        const company = request.body;
        dbCollection.insertOne(company, (error, result) => { 
            if (error) throw error;
            // return updated list
            dbCollection.find().toArray((_error, _result) => { 
                if (_error) throw _error;
                response.json(_result);
            });
        });
    }));

Он добавляет один документ в базу данных с идентификатором, который он создает для себя, но по какой-то причине он не принимает данные тела. (2 строковых элемента {"name": "xy", "type": "company"})

И, наконец, deleteOne () :

router.route(server.delete("/company/delete/:id", (req, res) => {
        const companyId = req.param.id;
        console.log("Delete company with id: ", companyId);

        dbCollection.deleteOne({ _id: mongodb.ObjectId(companyId) }, function(err, result) {
            if (err) throw err;
            // send back entire updated list after successful request   (optional)
            dbCollection.find().toArray(function(_err, _result) {
                if (_err) throw _err;
                res.json(_result);
            });
        });
    }));

По какой-то причине он удаляет самый первый документ в коллекции, но не тот, который введен с соответствующим идентификатором.

Если бы кто-нибудь мог помочь мне с этим, это было бы здорово. Заранее спасибо!

Редактировать 1: Добавление нового документа в коллекцию через Почтальона

Коллекция после добавления

Редактировать 2: Получить запрос с помощью идентификатора и ответа (возвращает ноль)

Вывод на консоль: Отображение компании с идентификатором: 5e63db861dd0ce2418ce423d

Редактировать 3:

Исправлен код для методов findOne() и deleteOne().

При попытке с _id вам необходимо преобразовать строку (request.params.id) в ObjectId ().
Преобразовать строку в ObjectID в MongoDB - whoami

...