Подтвердить что ты не робот

Запрос запроса 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');

Он работает, потому что его (имя модели, имя схемы, имя коллекции)

4b9b3361

Ответ 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, он всегда возвращал пустой или пустой массив. Надеюсь, что информация может быть полезной для кого-то.