MongoDb, запретить создание одного и того же объекта два раза - PullRequest
0 голосов
/ 17 июня 2019

Мне нужно было создать базу данных с MongoDb, Node.js и подключиться к серверу WebSocket, а также обновлять базу данных данными, отправленными из Websockets. Websockets отправляет много видов данных, связанных с конкретным идентификатором устройства. Работает нормально, соединение установлено, оно продолжает обновлять Mongo, но дело в том, что иногда, когда данные об определенном устройстве отправляются в первый раз, он создает один и тот же объект дважды. Не уверен, правильно ли я объяснил, что имею в виду, но идея состоит в том, чтобы не допустить, чтобы Mongo удвоил устройство при его создании.

connection.onmessage = e => {
    const resp = JSON.parse(e.data)
    const server_name = e.target._socket._host.slice(0, 5)
    setTimeout(() => {
        push_data_to_database(resp, server_name)
    },500)

}

push_data_to_database = (message, server) => {
    // console.log("data::::", message)
    deviceControllers.addDevice({device_id: message.device_id, server_name: server})

    if (message.event == 'SCRIPT_START') {
        deviceControllers.updateDevice(
            {device_id: message.device_id},
            {scriptexecute_timestamp: message.timestamp}
        )
    } 
}

И функция для добавления устройства в базу данных

exports.addDevice = async(req, resp) => {
    try {
        const validation = await Device.find(req)
        if (!validation.length && req.device_id !== undefined) {
            const device = new Device(req)
            console.log('added:',device)
            return device.save()
        }
    }
    catch (err) {
        throw err
    }
}

1 Ответ

1 голос
/ 17 июня 2019

Вы можете создать уникальный индекс для этого «device_id» в коллекции, чтобы при добавлении второй записи возникла ошибка.Этот уникальный индекс обеспечивает отсутствие повторяющихся значений для индексированного поля.

db.collection_name.createIndex ({"device_id": 1}, {"unique": true})

Вы можететакже создайте уникальный индекс, объединяющий несколько полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...