22

我似乎无法得到 mongodb 的回复。我在猫鼬的帮助下使用 node.js 和 mongodb。

在我的 node.js 应用程序中,我有

mongoose.connect('mongodb://localhost:27017/myDB');

var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

var BlogPost = new Schema({
    author  : ObjectId,
    title   : String,
    slug    : { type: String, lowercase: true, trim: true },
    content : String,
    summary : String,
    date    : Date
})

var BlogModel = mongoose.model('BlogPost', BlogPost);

BlogModel.find({}, function(docs){
   console.log(docs);
});

如果我在 mongo shell 中输入 show dbs 我得到

admin   (empty)
myDB       0.203125GB
local   (empty)
test    (empty)

db.blogmodel.find() 返回:

{ "_id" : ObjectId("50108d3df57b0e3375a20479"), "title" : "FirstPost" }

是的,我确实有 mongod 运行。

固定解决方案

var BlogModel = mongoose.model('blogmodel', BlogPost, 'blogmodel');

它之所以有效,是因为它的(模型名称、模式名称、集合名称)

4

4 回答 4

41

Mongoose 将模型名称复数化,因此它运行find在“blogposts”集合而不是“blogpost”上。也就是说,您在 mongo shell 中的查询位于“blogmodel”集合中。在这种情况下:

var BlogModel = mongoose.Model("BlogModel", ..)

或将集合名称作为第三个参数传递:

var BlogModel = mongoose.model("BlogPost", schema, "blogmodel")
于 2012-07-26T03:56:15.907 回答
6

BlogModel.find回调的第一个参数是err,第二个参数是docs。所以你的代码应该是:

BlogModel.find({}, function(err, docs){
   console.log(docs);
});
于 2012-07-26T03:10:53.217 回答
0

我昨天遇到了类似的错误,在我的情况下,错误是由导入 mongo 的数据引起的。在我使用 mongoimport key 后,_id 被存储为字符串而不是 ObjectId。当我在 mongo 中查询数据时,一切正常,但是在 Mongoose 中,当我尝试通过 _id 查找某些内容时,它总是返回 null 或空数组。我希望这些信息可能对某人有用。

于 2015-12-10T16:36:24.473 回答
0

对于即使在检查接受的答案后仍然遇到此问题的任何人 - 确保您的数据库连接 url 包含数据库名称,例如数据库名称myDB......

mongoose.connect(`mongodb://localhost:27017/myDB`)

我忘记了它,我的猫鼬搜索都返回空数组或空数组。

于 2022-01-19T13:08:07.263 回答