如何保存对mongodb的websocket响应

时间:2018-02-02 11:13:10

标签: node.js mongodb mongoose

我使用node.js ws模块连接到websocket。 每次我收到一个名为" add_items"我想将它保存到mLab云数据库。

Websocket响应看起来像这样

{"event":"add_items","data":[

{"id":["13635936204"],
"m":"name1",
"p": 14.00}

{"id":["13635936220"],
"m":"name2",
"p": 50.00}

]}

连接数据库和保存新数据的最佳方法是什么?

目前我使用.forEach方法循环遍历数组,而不是为每个新项创建对象,并使用db.collection.insert()方法将其保存到数据库。但问题是我每秒可能会获得超过50个项目,有时我会收到错误" mongodb连接超时"。是否可以使用mongoose模块来简化此过程?

1 个答案:

答案 0 :(得分:0)

您可以使用MongoDB的insertMany

db.collection.insertMany(websocketEvent.data);

其中websocketEvent是通过Websocket收到的响应。检查insertMany语法和信息here

<强>更新

也许你可以遍历调用updateOne的数组并决定使用arrayFilters字段更新或插入,如下所示:

websocketEvent.data.forEach(event => {
    db.collection.updateOne(
       { _id: ObjectID(event.id[0])},
       { $set: { m: event.m, p: event.p }},
       {
         upsert: true,
         arrayFilters: [ <filterdocument1>, ... ]
       }
    )
}

检查docs for info on the arrayFilters field for updateOne