0

我有以下架构:

_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){...});

当我声明模式和模型时,我做错了什么吗?我见过很多例子,人们似乎在做我正在尝试的事情。任何帮助将不胜感激!提前致谢。

4

2 回答 2

2

猫鼬模型的findById方法用于查找该模型的实例,该实例_id作为该方法的第一个参数提供。所以Schedule.findById返回Schedule实例,而不是单个Game实例。 Schedule.findOne({'game._id' : req.params._id}, ...将为您提供包含具有该 id的Schedule实例,但如果您需要按 id 查询实例,您应该将它们保存在单独的集合中,而不是将它们嵌入到.GameGameSchedule

于 2012-08-14T02:49:02.240 回答
0

查看您的代码,我的第一个猜测实际上是您findById的结构不太正确。

首先,您使用该值req.params._id来获取 id。我见过的大多数代码示例以及我的代码:id都在路由器 ( app.get('/schedules/:id')) 中使用,这实际上意味着您要查找的 ID 存储在req.params.id. 你必须在你的代码中检查它。

其次,据我了解,在这种情况下,findById 仅对通过该 ID 查找计划有用。尝试仅使用普通查找。

最后的想法:您在{'game._id' : req.params._id}.

希望其中有所帮助。:)

于 2012-08-13T13:11:39.053 回答