MongoDB插入异步问题

时间:2018-05-25 16:58:54

标签: javascript node.js mongodb asynchronous

我在websocket nodeJS应用程序中使用mongodb。目前我只有一个客户端,它不断发送数据。我得到随机重复的密钥(_id)错误。这些错误很奇怪,因为它们出现了,而插入了下一个元素,实际存储了带有重复键的元素。 (虽然只发送一次元素)

以下是该实现的代码段:

var server = ws.createServer(function (conn) {
  conn.on("text", function (str) {
    data = JSON.parse(str);
    MongoClient.connect(url, function(err, client) {

      if (err) throw err;
        var db = client.db('locator')

        db.collection('locations').insertOne(data, function(err, res) {
              client.close();
          });

        });
    };

  })

  conn.on("close", function (code, reason) {
    console.log("Connection closed")
  })
}).listen(8001);

我已经检查过_id是否是唯一的。重复的id错误说,它无法存储,例如_id 7而websocket实际上接收了下一个元素,并且已经存储了带有_id的元素。我认为这个问题可能与异步匿名函数有关,但我不太确定,如果这是问题,我也不知道如何解决这个问题。

编辑以下是一些示例数据:

{
  '_id': 7, 
  'dataId': 7,
  'timestamp': 152731785.8186,
  'causeOfTransport': "",            
  'location': {
    'pos': {
      'long': 0,
      'lat': 0,
      'altitude': 0
    },
  },

  'connection': {
    'qualitiy': 0,
    'speed': 0
  },

  'device': {
    'software': "v0.0.1"
   }
}

0 个答案:

没有答案