基本节点/mongo/mongoose 连接不起作用

Posted

技术标签:

【中文标题】基本节点/mongo/mongoose 连接不起作用【英文标题】:Basic node/mongo/mongoose connection not working 【发布时间】:2015-01-18 11:42:16 【问题描述】:

我是 MEAN 堆栈开发的新手。我在 MongoDB 中创建了一个名为“framework”的数据库和一个名为“users”的集合,其中包含一些 json。我可以看到这些都在那里,并且很高兴通过 Mac 终端使用 mongo 命令。

现在我正在我的应用程序中编写一些 Mongoose 并测试一切是否正常,我只想获取集合名称的列表。我试过这个:

var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/framework");

mongoose.connection.db.collectionNames(function (err, names) 
  if (err) console.log(err);
  else console.log(names);
);

但是当我通过命令行运行该文件时,它根本不会记录任何内容。我在这里做错了什么?

【问题讨论】:

我认为您忘记了本地主机的端口。默认情况下 mongo 在 27017 运行。 端口如果是27017则不需要。 【参考方案1】:

connection成功建立后将其设为callback 函数。如果它不在回调方法中,由于其asynchronous 的性质,它可能会在成功建立与数据库的连接之前执行。

var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/framework");

mongoose.connection.on('connected', function () 
    mongoose.connection.db.collectionNames(function (err, names) 
        if (err) console.log(err);
        else console.log(names);
    );
)

【讨论】:

【参考方案2】:

mongoose.connection.db.collectionNames 已弃用。使用此代码获取所有集合的列表

const mongoose = require("mongoose")
mongoose.connect("mongodb://localhost:27017/framework");
mongoose.connection.on('open', () => 
  console.log('Connected to mongodb server.');
  mongoose.connection.db.listCollections().toArray(function (err, names) 
    console.log(names);
   );
)

【讨论】:

【参考方案3】:

如果您不太确定 mongoose.connect 方法的 URL 字符串应该是什么。不用担心,转到您的命令提示符,输入 mongo

这将启动应用程序,您可以在其中查看连接详细信息,例如

然后使用相同的 URL 并附加您的 db-name

const mongoose = require('mongoose');
mongoose.connect("mongodb://127.0.0.1:27017/db-name").then(
    ()=> console.log('connected to db')
).catch(
    (err)=> console.error(err)
);

希望对你有帮助!!

【讨论】:

以上是关于基本节点/mongo/mongoose 连接不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mongo/Mongoose 快速更新导致数据丢失

Mongo/Mongoose 中的复杂约束

如何承诺 Mongo/Mongoose 找到

(Mongo/Mongoose) 如何处理等待多个查询的结果

Mongo / Mongoose 聚合 - $redact 和 $cond 问题

Mongo (+Mongoose) 错误:无法找到 $geoNear 查询的索引