我使用 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 模块来简化此过程?
您可以使用 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
.
我是一名优秀的程序员,十分优秀!