【问题标题】:MongoDB find() returns nothingMongoDB find() 什么都不返回
【发布时间】:2013-09-25 15:37:06
【问题描述】:

我正在尝试从 mongodb shell 查询我的数据库以检索所有条目。不过,我的 find() 方法什么也没返回。

这是我正在使用的猫鼬模型:

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var ArticleSchema = new Schema({
    title: String,
    content: String,
    author: { type: String, default: 'Vlad'},
    postDate: { type: Date, default: Date.now }
});

ArticleSchema.methods.formatTitle = function() {
    var link = this.title.replace(/\s/g, '-');
    return '/article/' + link;
};

ArticleSchema.methods.snapshot = function() {
    var snapshot = this.content.substring(0, 500);
    return snapshot;
};

module.exports = mongoose.model('Article', ArticleSchema);

在浏览器中加载我的 Express.js 应用程序时,我可以毫无问题地显示使用我的 API 添加的所有文章。不过,我只想进入 mongo shell 并查询它们。我使用了以下查询:

// blog is the database name (mongodb://localhost:27017/blog)
db.blog.find()

我得到一个空字符串作为回报,基本上是控制台中的一个新行。

【问题讨论】:

  • 您始终可以在 mongodb 控制台中使用 db.getCollectionNames() 来查看单个数据库的存在情况。

标签: node.js mongodb express mongoose


【解决方案1】:

你的答案就在那里,在问题中:

// blog is the database name (mongodb://localhost:27017/blog)
db.blog.find()

所以db已经指的是正确的数据库。而不是blog,输入集合名称,而不是数据库名称。

db.articles.find()

【讨论】:

  • 我明白了。所以,每当我有一个名为 Model 的模型时,mongodb 就会自动生成一个集合(toLowerCase() + 's'),对吧?这就是我所缺少的:D
  • 更有可能的是,mongoose 在第一次插入时创建了这些集合。顺便说一句,您可以通过在 shell 中运行它来查看所有可用的集合:show collections
  • 太棒了!非常感谢您的提示!真的很有用!
【解决方案2】:

Mongo shell 将在启动时连接到测试数据库,您需要更改数据库,然后在您的集合上执行查找:

use blog
db.articles.find()

【讨论】:

  • use 如果 url 中包含数据库名称,则不需要声明
  • 如果您更改了第一个数据库的名称,mongodb 将继续在登录 url 中显示旧数据库的名称。因此,使用允许切换(或在 url 中手动更改)
【解决方案3】:

首先选择数据库,然后在集合上找到

use blog
db.articles.find()

【讨论】:

  • 我在尝试使用 find() 之前使用了 use blog 查询
  • 你用过db.articles.find()吗?在问题中它说“db.blog”。
  • 这就是我一直在寻找的,正如塞尔吉奥在他的回答中所说的那样:D 感谢您的快速回复!
  • 如果数据库名称包含在连接字符串中,则不需要使用语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2018-09-10
  • 2017-02-14
相关资源
最近更新 更多