MongoDB Atlas/ Обновление и удаление облака не работают

У меня проблема, когда я пытаюсь обновить или удалить данные из моей базы данных MongoDB Atlas.

Дело в том, что похоже, что методы updateOne и deleteOne вызываются, но не правильно.

Всякий раз, когда я пытаюсь получить операцию, результат будет следующим:

      {
    "result": {
        "n": 0,
        "nModified": 0,
    [...]
    "ok": 1,
    [...]
    "modifiedCount": 0,
    "upsertedId": null,
    "upsertedCount": 0,
    "matchedCount": 0,
    "n": 0,
    "nModified": 0,
    [...]
}

Это мои методы:

      const ObjectID = require('mongodb');

[...]

// Deletes an specific object [NOT WORKING]
router.delete('/:dataID', async (req, res) => {
    // http://localhost:3000/data/<dataID>
    try {
        const removedObject = await collectionDatos.deleteOne({ "_id" : ObjectID("\"" + req.params.dataID + "\"") });
        res.json(removedObject );
    } catch (e) {
        console.log(e);
        res.json({message: e});
    }
});

// Updates an specific object [NOT WORKING]
router.patch('/:dataID', async (req, res) => {
    // http://localhost:3000/data/<dataID>
    try {
        const updatedObject = await collectionDatos.updateOne({_id: req.params.dataID}, { $set: {
                name: req.body.name,
                surname: req.body.surname,
                born_date: req.body.born_date,
                email: req.body.email
            }});
        res.json(updatedObject);
    } catch (e) {
        console.log(e);
        res.json({message: e});
    }
});

В частности, когда я вызываю метод removeOne, он выдает мне эту трассировку ошибки:

      (node:12222) UnhandledPromiseRejectionWarning: MongoParseError: Invalid connection string
    at parseConnectionString

(node:12222) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

(node:12222) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Я уверен, что ошибка в const removedObject = await collectionDatos.deleteOne({ "_id" : ObjectID("\"" + req.params.dataID + "\"") }); а также const updatedObject = await collectionDatos.updateOne({_id: req.params.dataID}, { $set: { [...] } но я делаю только то, что написано в документации :(

[deleteOne: https://docs.mongodb.com/manual/reference/method/db.collection.deleteOne/][updateOne: https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/]

Что мне нужно изменить, чтобы он заработал? По правде говоря, существует не так много ресурсов / руководств, кроме документации, и это делает мою жизнь горькой. Заранее спасибо!

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

Это моя строка подключения: mongodb+srv://<USER>:<PASS>@cluster0.znqxh.mongodb.net/<DATABASE_NAME>?retryWrites=true&w=majority

Вот как я устанавливаю связь:

      function connectToDatabse() {
    console.log("Connecting to the DB...");
    if (!connected) {
        const MongoClient = require('mongodb').MongoClient;
        const uri = process.env.DB_CONNECTION;
        client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
        client.connect(async err => {
            if (await err) {
                console.log("Error connecting to MongoDB:\n\t" + err.toString());
                await console.log('Disconnecting from the DB...');
                await client.close();
                await console.log('\tDisconnected from the DB!');
                await process.exit();
            } else {
                console.log("\tConnected to the DB!");
                collectionData = client.db("dataBase").collection("data");
            }
        });
    }
    connected = true;
}

1 ответ

Решение

В первой строке вы извлекаете всю библиотеку вместо ObjectId.

      const ObjectID = require('mongodb');

Измените его на:

      const { ObjectId } = require('mongodb');

Кроме того, не забудьте обновить места, где вы используете ObjectID, до ObjectId.

Другие вопросы по тегам