mongoDB 3.6升级到4.1 node版本记录

655 阅读1分钟

记录一下工作中遇到的问题,也是刚开始转战后端开发。记录一些自己遇到的问题。也希望可以帮助到有同样的需要的人。

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事件执行。

之后如果遇到相应的问题会持续更新的,希望可以帮助有需要的人。