我目前正在尝试开发一个使用mongo和node.js的应用程序。猫鼬填充返回undefined
我在构建使用填充选项的查询时遇到问题。
这里是我的架构:
// 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行显示的第一部电影的头衔,我得到了一个错误“类型错误:无法读取属性“标题'未定义“。我检查了猫鼬的文档,不明白为什么我得到这个错误。
我想指定我的数据库包含有效的数据。 我把猫鼬在调试模式下,这是所执行的查询:
Mongoose: user.findOne({ login: 'user' }) { fields: undefined }
Mongoose: user.find({ _id: { '$in': [ ObjectId("52e2a28949ad409834473e71"), ObjectId("52e2a28949ad409834473e79") ] } }) { fields: undefined }
第二行两个ID电影的有效身份证件。我想显示他们的名字。
非常感谢您的帮助。
谢谢您的回答WiredPrairie, 更改我的userSchema像你说: **的电影:[{类型:mongoose.Schema.Types.ObjectId,REF: “movieModel”}] ** 现在我面临一个新的错误: **“抛出新的MongooseError.MissingSchemaError(名称); MongooseError:架构尚未注册模型”movieModel“** 我不知道这是怎么回事:( – Arawn
你并没有正确地改变我的想法,你在'ref'中使用的字符串需要与用于注册模型的名字完全一致,比如:''Movie“' – WiredPrairie
不,我确定我的字符串是正确。我正在像这样定义我的模型: var movieModel = mongoose.model(“movie”,movieSchema); 这真的让我困扰,因为我不明白这个问题从何而来。 我想知道,我的问题与我在数据库中插入数据的方式有关吗?目前,我将所有数据都以JSON格式存储在js文件中。我通过在命令行中输入来插入它们:mongo datafile.js 我需要使用mongoose插入数据吗?对不起,如果我的问题似乎很愚蠢,但这是我使用mongoDB,mongoose和nodejs构建的第一个应用程序。 谢谢 – Arawn