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。我实际上将游戏移动到了另一个集合。这解决了我遇到的问题。