2012-08-13 89 views
0

我有以下模式:貓鼬嵌入文檔查詢返回null

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

我在聲明模式和模型時做錯了什麼嗎?我看過很多例子,人們似乎正在做我正在嘗試的事情。任何幫助將不勝感激!提前致謝。

+0

仍然沒有任何運氣與此。我想補充說我使用的是Mongoose 3.0.0 – 2012-08-13 22:37:55

回答

2

貓鼬模型的findById方法用於查找該模型的實例,其中_id作爲該方法的第一個參數提供。所以Schedule.findById返回Schedule實例,而不是個別Game實例。 Schedule.findOne({'game._id' : req.params._id}, ...會給你Schedule實例包含Game與該ID,但如果你需要通過ID查詢Game實例,你應該保持它們在一個單獨的集合,而不是將它們嵌入Schedule

+0

謝謝約翰尼我實際上把遊戲移動到另一個集合。這解決了我遇到的問題。 – 2012-08-17 11:49:37

0

看着你的代碼,我的第一個猜測實際上是你的findById結構不正確。

首先,您使用值req.params._id來獲取該ID。我見過的大部分代碼示例和我的代碼在路由器中使用:idapp.get('/schedules/:id')),這實際上意味着您要查找的ID存儲在req.params.id中。你必須在你的代碼中檢查。

其次,就我的理解而言,findById僅用於在此情況下查找該ID的Schedule。嘗試使用一個正常的查找。

最後一個想法:你錯過了{'game._id' : req.params._id}末尾的一個結束括號。

希望有助於。 :)

+0

感謝您的回覆。我寫道:_id在我的路線,我檢查值是正確的console.log()。我會嘗試找到並看看是怎麼回事。 – 2012-08-13 13:15:10