В настоящее время я пытаюсь разработать приложение, использующее mongo и node.js.Mongoose populate return undefined
У меня возникла проблема, когда я хочу создать запрос, который использует параметр заполнения.
Вот мои Schemas:
// Schema used by mongoose
var userSchema = new mongoose.Schema(
{
_id: mongoose.Schema.Types.ObjectId,
login: String,
password: String,
movies: [ { type: mongoose.Schema.Types.ObjectId, ref: movieModel} ],
admin: Boolean
},{ collection: "user" });
var movieSchema = new mongoose.Schema(
{
_id: mongoose.Schema.Types.ObjectId,
title: String,
}, { collection: "movie" });
Как вы можете видеть, каждый пользователь имеет множество фильмов, этот массив содержит действительные идентификаторы фильмов. Я хочу, чтобы фильмы были пользователями. Это, как я строю мой запрос:
var query = userModel.findOne({ login: req.session.user["login"] })
.populate("movies");
query.exec(function(err, user)
{
if (err)
throw err;
console.log(user.movies[0].title);
});
запрос выполняется успешно, но при попытке отобразить название первого фильма на console.log линии я получил ошибку «TypeError: Не удается прочитать свойство" title 'of undefined ". Я проверил документацию о мангусте и не понимаю, почему я получаю эту ошибку.
Я хотел бы указать, что моя база данных содержит действительные данные. я ставлю мангуста в режиме отладки, и это запрос, который выполняется:
Mongoose: user.findOne({ login: 'user' }) { fields: undefined }
Mongoose: user.find({ _id: { '$in': [ ObjectId("52e2a28949ad409834473e71"), ObjectId("52e2a28949ad409834473e79") ] } }) { fields: undefined }
Два иды на второй линии являются допустимыми идентификаторами фильмов. Я хотел бы показать их имя.
Большое спасибо за помощь.
Спасибо за ваш ответ WiredPrairie, меняет свой userSchema, как вы сказали: ** фильмы: [{типа: mongoose.Schema.Types.ObjectId, ссылка: "movieModel"}] ** Теперь я облицовочный новую ошибку: ** "проливают новый MongooseError.MissingSchemaError (имя); MongooseError: Схема не была зарегистрирована для модели„movieModel“** Я не знаю, что здесь происходит :( – Arawn
Вы Я не думаю, что внесение изменений корректно. Строка, которую вы используете в 'ref', должна точно соответствовать имени, используемому для регистрации модели. Может быть:' 'Movie '' например. – WiredPrairie
Нет. Я уверен, что моя строка верный.Я определяю свою модель следующим образом: var movieModel = mongoose.model ("movie", movieSchema); Это действительно беспокоит меня, поскольку я не понимаю, откуда эта проблема. Мне было интересно, моя проблема связана с тем, как я вставляю данные в свою базу данных? В настоящее время я помещаю все свои данные в файл js в формате JSON. И я вставляю их, введя в командной строке: mongo datafile.js Нужно ли использовать mongoose для вставки данных? Извините, если мой вопрос кажется глупым, но это самое первое приложение, которое я создаю, используя mongoDB, mongoose и nodejs. Спасибо – Arawn