我无法使用 Mongoose 在 MongoDB 中保存或查找文档

Posted

技术标签:

【中文标题】我无法使用 Mongoose 在 MongoDB 中保存或查找文档【英文标题】:I can't save or find a document into MongoDB using Mongoose 【发布时间】:2019-01-13 23:41:43 【问题描述】:

我是第一次使用 nodeJS,我正在尝试做一个通过 Mongoose 连接到 MongoDB 的应用程序。

我已经成功安装了 MongoDB、NodeJS 和 Mongoose(通过 npm)。

我的问题是: 当我通过猫鼬连接我的节点应用程序时没有显示任何错误,但是当我尝试插入一个文档时,它根本没有做任何事情。在保存线处冻结。

这是我的代码

var express  = require('express');
var app      = express();                             
var mongoose = require('mongoose');
...
mongoose.connect('mongodb://127.0.0.1:27017/exampleDB');
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));

var someModel = mongoose.model('someModel', 
    name : String
);

app.get('/api/todos', function(req, res) 
  var awesome_instance = new someModel( name: 'awesome' );
  console.log("about to save the document");
  awesome_instance.save(function (err) 
    if (err) return handleError(err);
  );
);

app.post('/api/todos', function(req, res) 

);
...
app.listen(8080);
console.log("App listening on port 8080");

使用 mongo 客户端,我可以看到我的数据库,但看不到代码应该创建的集合。我的 mongoDB 也检测到来自 nodeJS 的连接。我只是不知道会发生什么。

这就是我的 server.js(节点)显示的内容

$ node server.js
App listening on port 8080
about to save the document
GET /api/todos - - ms - -

这是我的 mongo 客户端

$ ./mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
use exampleDB
switched to db exampleDB
show collections
exampleCollection

非常感谢。

【问题讨论】:

我只用你的模型和保存方法测试了你在一个简单的 node.js 应用程序上尝试做的事情。工作没有问题。创建集合并保存。但是我没有使用 express,所以这可能是问题所在。 您的代码在我的机器上运行良好。它保存了文档没有任何问题。所以请检查你的节点模块和机器环境。 哦,那很混乱。 Windows 是否有可能阻止 Mongo 27017 端口?我检查了安全性,找不到任何东西。我也试过没有快递,是的,也做了同样的事情。您是否将 Mongo 社区安装为服务? 【参考方案1】:

让你的get 看看它是否有效。

var express  = require('express');
var app      = express();                             
var mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/exampleDB',  useNewUrlParser: true );
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));

var someModel = mongoose.model('someModel', 
    name : String
);

app.get('/api/todos', async function(req, res) 
var awesome_instance = new someModel( name: 'awesome' );
await awesome_instance.save()
);

app.post('/api/todos', function(req, res) 

);
app.listen(8080, ()=>console.log("App listening on port 8080"));

【讨论】:

我试过了,谢谢你的建议。它完全一样。我认为与数据库更相关。如果我在 .save() 方法之后记录某些内容,它会正确记录。

以上是关于我无法使用 Mongoose 在 MongoDB 中保存或查找文档的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 mongoose 在 mongodb 中增加字段

无法使用 mongoose 连接到 mongodb 数据库

无法通过 express/mongoose/angularjs 从 Mongodb 访问数据

无法使用 mongoose 连接到 Mongodb Atlas

NestJs / Mongoose 在 Docker 撰写时无法建立 MongoDB 数据库连接

无法将 MongoDB 与 Mongoose 连接