我要做的就是用MongoDb,Node.js创建数据库并与WebSocket服务器连接,并继续使用Websockets发送的数据更新数据库。 Websockets发送与特定设备ID连接的多种数据。工作正常,建立连接,它会不断更新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
}
}
答案 0 :(得分:1)
您可以在集合中为该“ device_id”创建唯一索引,以便添加第二个条目时会出错。此唯一索引可确保索引字段没有重复的值。
db.collection_name.createIndex({“ device_id”:1},{“ unique”:true})
您还可以创建结合多个字段的唯一索引。