我有以下架构:
_schema : {
Prize : new Schema({
prizeName : { type : String },
thumbnailImage : [ String ],
detailImage : [ String ],
prizeCategory : [ {type : String, index : true } ],
prizeDescription : { type : String },
prizePrice : { type : Number, required : true }
}),
Game : new Schema ({
roomName : { type : String, required : true },
openTime : { type : Date },
closeTime : { type : Date },
minPlayers : { type : Number },
maxPlayers : { type : Number, required : true },
numberOfPlayers : { type : Number },
winner : { userId : { type : ObjectId, index : true, ref : 'User'} },
prize : [ this.Prize ],
tag : [ { type : String, index : true } ],
status : { type : Number, index : true },
businessType : { type : Number, required : true, index : true },
mallId : { type : ObjectId, ref : 'Mall' },
registeredPlayers : { type : ObjectId, ref : 'User' }
}),
Schedule : new Schema ({
_id : ObjectId,
time : { type : Date, index : true },
game : [ this.Game ]
}),
}
但是,当我尝试查询游戏嵌入文档时,该对象始终为null。我这样查询:
var Schedule = mongoose.model('Schedule', this._schema.Schedule);
Schedule.findById({'game._id' : req.params._id}).exec(function(err,gameDetail){...});
当我声明架构和模型时,我做错了吗?我看过很多例子,人们似乎正在做我正在尝试的事情。任何帮助将不胜感激!提前谢谢。
答案 0 :(得分:2)
mongoose Model的findById
方法用于查找该模型的实例,其中_id
作为方法的第一个参数提供。因此Schedule.findById
会返回Schedule
个实例,而不是单个Game
个实例。 Schedule.findOne({'game._id' : req.params._id}, ...
将为您提供包含 Schedule
的{{1}}实例,但如果您需要按ID查询Game
个实例,应该将它们保存在单独的集合中,而不是将它们嵌入Game
中。
答案 1 :(得分:0)
查看您的代码,我的第一个猜测实际上是您的findById
结构不正确。
首先,您使用值req.params._id
来获取ID。我见过的大多数代码示例和我的代码在路由器(:id
)中使用app.get('/schedules/:id')
,这实际上意味着您要查找的ID存储在req.params.id
中。你必须在你的代码中检查它。
其次,根据我的理解,findById仅用于在这种情况下通过该ID查找Schedule。尝试使用普通的查找。
最后一想:你在{'game._id' : req.params._id}
的末尾错过了一个结束的大括号。
希望有所帮助。 :)