Запрос запроса Mongoose null
Я не могу получить ответ от 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);
});
Если я набираю show dbs в оболочке mongo, я получаю
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');
Он работает, потому что его (имя модели, имя схемы, имя коллекции)
Ответы
Ответ 1
Mongoose дублирует имена моделей, поэтому он запускает find
в коллекции "blogposts" вместо "blogpost". Тем не менее, ваш запрос в оболочке mongo находится в коллекции "blogmodel". В этом случае:
var BlogModel = mongoose.Model("BlogModel", ..)
или передать имя коллекции в качестве третьего параметра:
var BlogModel = mongoose.model("BlogPost", schema, "blogmodel")
Ответ 2
Первым параметром вашего обратного вызова BlogModel.find
является err
, второй параметр docs
. Поэтому ваш код должен быть:
BlogModel.find({}, function(err, docs){
console.log(docs);
});
Ответ 3
У меня была аналогичная ошибка вчера, в моем случае ошибка была вызвана данными, импортированными в mongo. После того как я использовал mongoimport, ключ _id был сохранен как строка вместо ObjectId. Когда я запрашивал данные в mongo, все работает хорошо, но в Mongoose, когда я пытался найти что-то по _id, он всегда возвращал пустой или пустой массив. Надеюсь, что информация может быть полезной для кого-то.