Node.js Mongoose嵌入式文档查询返回null
我有以下模式:Node.js Mongoose嵌入式文档查询返回null,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有以下模式: _schema : { Prize : new Schema({ prizeName : { type : String }, thumbnailImage : [ String ], detailImage : [ String ], prizeCategory : [ {type : String, index : true } ], prizeDescription : { type : St
_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 ]
}),
}
然而,当我试图查询游戏嵌入文档时,对象总是空的。我这样问:
var Schedule = mongoose.model('Schedule', this._schema.Schedule);
Schedule.findById({'game._id' : req.params._id}).exec(function(err,gameDetail){...});
当我声明模式和模型时,我是否做错了什么?我见过很多例子,人们似乎正是在做我想做的事情。任何帮助都将不胜感激!提前谢谢。看看您的代码,我的第一个猜测是您的
findById
结构不太正确
首先,您使用值req.params.\u id
获取id。我看到的大多数代码示例以及我的代码都使用路由器中的:id
(app.get('/schedules/:id')
),这实际上意味着您要查找的id存储在req.params.id
中。您必须在代码中检查这一点
其次,据我所知,findById仅在本例中用于查找该ID的计划。请尝试仅使用普通查找
最后一个想法:您在{'game.\u id':req.params.\u id}
结束时缺少了一个收尾方括号
希望这方面能有所帮助。:) 猫鼬模型的方法用于查找该模型的实例,该模型的
\u id
作为该方法的第一个参数提供。因此Schedule.findById
返回Schedule
实例,而不是单个Game
实例<代码>Schedule.findOne({'game.\u id':req.params.\u id},…将为您获取包含该id的游戏的时间表
实例,但是如果您需要按id查询游戏
实例,您应该将它们保存在单独的集合中,而不是将它们嵌入时间表
谢谢您的回复。我已经写了:_idin my routes,I'm chec>king console.log()的值是正确的。我将尝试查找并查看结果。仍然没有任何运气。我想补充一点,我正在使用Mongoose 3.0.0 Hanks Johnny。我实际上将游戏移动到了另一个集合。这解决了我遇到的问题。