我使用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模块来简化此过程?
答案 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>, ... ]
}
)
}