Nodejs mongoose 保存成功,但是用其它工具看 test 数据库中没有 Blog 这个 Collection

发布于 1周前 作者 bupafengyu 来自 nodejs/Nestjs

Nodejs mongoose 保存成功,但是用其它工具看 test 数据库中没有 Blog 这个 Collection

var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
mongoose.connect(‘mongodb://localhost/test’);
var db = mongoose.connection;
db.on(‘error’, console.error.bind(console, ‘connection error:’));
db.once(‘open’, function (callback) {
// yay!
var blogSchema = new Schema({
title:  String,
author: String,
body:   String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs:  Number
}
});
var Blog = mongoose.model(‘Blog’, blogSchema);
var blog = new Blog({
title: ‘this is my blog title’,
author: ‘me’,
body: ‘the body of my blog. can you see that?’
});

blog.save(); });

开发环境: Nodejs + Express + Mac + MongoDB, 都在最新版本


11 回复

用其他工具查的时候试试看 Blogs ?


.save 的返回你都没处理,你怎么知道保存成功了……

是 blogs 命名的 collection 吧,如果你要指定自定义的 collection, 需要在 schema 中设置,{collection: ‘Blog’}

其它工具是指 Robomongo 吗,旧版本的连接 mongodb 3.2 会有这个问题

对的,我是用的 Robomongo 0.8.4

我在 save 中加了一个 function(error, model) {} ,error 为空, model 是有值的。

我直接安装好 mongodb, 然后运行的 shell:mongod --dbpath ./data , 运行以上代码后,用 Robomongo 查看数据库 test 创建成功了,就是没有 Collections, test 数据库下面 Collections,Functions,Users 都为 0

我试一试其他工具。

果然是工具 Robomongo 问题。

mongoose 会自动在集合名后加 s ,所以你的集合其实是 blogs ,如果要指定是 blog ,这样写:
var Blog = mongoose.model(‘Blog’, blogSchema,‘Blog’);

在 Node.js 中使用 Mongoose 时,如果保存操作成功,但数据库中未显示相应的 Collection,可能有几个原因。以下是一些排查步骤和可能的代码示例:

  1. 确认数据库连接: 确保 Mongoose 正确连接到了 MongoDB 数据库。

    const mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true })
      .then(() => console.log('MongoDB connected'))
      .catch(err => console.error(err));
    
  2. 检查 Model 定义: 确保你定义的 Model 名称正确,并且保存操作没有错误。

    const blogSchema = new mongoose.Schema({
      title: String,
      content: String
    });
    
    const Blog = mongoose.model('Blog', blogSchema);
    
    const newBlog = new Blog({ title: 'Test Blog', content: 'This is a test blog post' });
    newBlog.save()
      .then(() => console.log('Blog saved'))
      .catch(err => console.error(err));
    
  3. 检查 MongoDB 客户端: 使用 MongoDB 客户端(如 Robo 3T 或 MongoDB Compass)查看数据库时,确保连接到的是正确的数据库实例和数据库名。

  4. 查看 Mongoose 日志: 启用 Mongoose 的调试模式,查看是否有更多信息。

    mongoose.set('debug', true);
    

如果以上步骤都正确无误,但问题依旧存在,请检查是否有其他中间件或配置可能影响数据库操作。

回到顶部