- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
记录一下工作中遇到的问题,也是刚开始转战后端开发。记录一些自己遇到的问题。也希望可以帮助到有同样的需要的人。
node mongoDB 3.6升级到4.1
数据库连接修改:
const option = {
w : 1, // 确保写入的mongod实例数量
readPreference : ReadPreference.PRIMARY,
replicaSet :undefined,
maxPoolSize : 6, // AP中如果并行操作数据库,这个值设小会影响性能
auth : { username: user, password: password },
authSource : domain,
authMechanism : 'SCRAM-SHA-1',
useNewUrlParser : true,
useUnifiedTopology: true,
directConnection: false // 如果replicaSet 为undefined则,directConnection为true,在dev开发环境中只能指定到主机上
};
// 连接数据库
MongoClient
.connect(`mongodb://${hosts}`, option)
.then(client => {
const db = client.db(domain);
let dbStatus = db.watch();
dbStatus.on('close', () => debug('connection close.'));
dbStatus.on('error', err => console.error(err));
dbStatus.on('reconnect', () => {
this.reconnect = (this.reconnect || 0) + 1;
console.warn('connection reconnect.', this.reconnect);
});
resolve({ client, db });
})
.catch(err => {
reject(err)
});
});
model的add方法:
collection.insertMany(parsed, option)
.then(result => {
if(isMany) {
resolve(result.insertedCount);
} else {
collection.findOne(result.insertedIds[0], option).then((findOneResult) => {
resolve();
}).catch(err => reject(err));
}
})
.catch(err => reject(err));
所有的ObjectID 引入修改
const { ObjectID } = require('mongodb'); 修改成
const { ObjectId: ObjectID } = require('mongodb');
db的collection方法不支持callBack形式
const res = db.collection(this.code, { ...option });
针对于事物嵌套问题
A事件开启事物,同时调用B事件,B事件同时也开启事物,形成嵌套问题。 解决:增加事件数量,仅当事件数量为1时。进行提交与取消操作。保证事件最终交由A事件执行。
之后如果遇到相应的问题会持续更新的,希望可以帮助有需要的人。