当readyState为1时,猫鼬查询不会运行

时间:2018-11-16 18:55:58

标签: javascript node.js mongodb mongoose

我编写了以下代码,用于不和谐的机器人。当我调用命令时,我第一次在控制台中获得matchID。但是,当我再次调用该命令时,没有任何输出。它卡在我有console.log(“ Stuck Here”)的位置附近。我是猫鼬的新手,所以我不知道该怎么办。

if (mongoose.connection.readyState === 0) {
                mongoose.connect(`mongodb://localhost/${server}`, {
                    useNewUrlParser: true
                });
                console.log('mongoose readyState is ' + mongoose.connection.readyState);
            }

            console.log("Stuck here!");

            mongoose.connection.on("error", function (err) {
                console.log("Could not connect to mongo server!");
                return console.log(err);
            });

            mongoose.connection.on('connected', function (ref) {
                console.log('Connected to mongo server.');

                mongoose.connection.db.listCollections({
                    name: "matches"
                }).next(function (err, collinfo) {
                    if (err) console.log(err);

                    if (collinfo) {
                        Matches.findOne({}, {}, {
                            sort: {
                                'created_at': -1
                            }
                        }, function (err, match) {
                            if (err) console.log(err);

                            console.log(`${match.matchID}`);
                        })
                    } else {
                    }    
                });
            })

1 个答案:

答案 0 :(得分:0)

猫鼬实际上是要用于单个数据库。创建多个连接或使用多个数据库不是不可能,但这也不是一件容易的事。例如,您必须为每个连接/数据库声明每个模型(例如,参见this answer)。

使用单个数据库并调整模型,使其包含属性server可能更容易,您可以将其用作所有查询的键。

因此,要检查服务器“ X”是否有Matches个文档,请运行Matches.findOne({ server : 'X' })

您还可以考虑创建一个单独的模型Servers,该模型将存储服务器的元数据,并在MatchesServers模型之间使用引用。有关here的更多信息。