Mongoose 未连接到集群节点中的数据库

Moongose not connecting to DB in a cluster node

我有一个带有集群 nodejs 应用程序的设置(1 个主程序和 4 个工作程序)。

master 实例化 workers 并创建一堆他们可以抓取的任务。

每个工作人员都像这样启动一个数据库连接:

import Database from './db';

//Worker
class Worker {
  constructor(process) {
    this.process = process;
    this.id = process.pid;

    this.db = new Database();
    console.log('[Worker][', this.id, '][Init] Ready');

    this.process.on('message', this.onMessage.bind(this));
  }

  onMessage(msg) {
     this.task = msg.task;
     new Task(this.task, this.db);
  }
}

我的数据库 class 看起来像这样:

import mongoose from 'mongoose';
import bluebird from 'bluebird';
import config from '../server/config/config.json';
import MyModel from '../server/model/mymodel';

class Database {
    constructor() {
        this.db = config.db;
        this.connect();
    }

    connect() {
        mongoose.Promise = bluebird;

        mongoose
            .connect(this.db.uri, {
                user: this.db.user,
                pass: this.db.pass,
                auth: {
                    authdb: this.db.authdb
                },
                promiseLibrary: bluebird,
                autoIndex: true,
                reconnectTries: Number.MAX_VALUE,
                reconnectInterval: 500,
                poolSize: 10,
                bufferMaxEntries: 0
            })
            .then(() => {
                console.log('connected');
            })
            .catch(err => {
                console.log(err);
                );
            });
    }

    async save(prices) {
        if (prices) {
            try {
                let bulkUpdate = MyModel.collection.initializeUnorderedBulkOp();
                //bulkUpdate is UNDEFINED !!!

                prices.forEach(price => {
                    bulkUpdate
                        .find({ price: price })
                        .upsert()
                        .updateOne(price);
                });

                await bulkUpdate.execute();
            } catch (err) {
                console.log(err);
            }
        }
        else {
            console.log('[Worker] No prices provided to save.');
        }
    }
}

我的任务class:

class Task {
    constructor(url, db) {
        this.url = url;
        this.db = db;
    }

    onDataReceived(prices) {
        if (prices) {
            try {
                this.db.save(prices);
            }
            catch (err) {
                console.log('Could not save data.');
                console.log(err);
            }
        }
        else {
            console.log('No data received');
            return;
        }
    }
}

当我执行代码时,bulkUpdate 变量在 initializeUnorderedBulkOp() 之后未定义,因此我无法对其执行 .find()

经过一番研究,似乎 moongose 可能尚未连接。问题是我在执行 initializeUnorderedBulkOp() 之前有控制台日志 console.log('connected');,所以我认为它已连接。

我的问题是,问题在哪里?使用集群的事实是否会混淆 mongoose 或我初始化它的方式?

谢谢

好的,所以我发现了问题,它与我组织集群的方式或 mongoose 本身无关。

我正在将集群应用程序设置为它自己的 package.json,并且出于某种原因它正在使用主应用程序 'mongoose' 包。所以我删除了集群 package.json 中的 'mongoose' 条目,一切正常...

我仍然不知道为什么它会破坏 mongoose(双重导入?)。