2012-08-13 9 views
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 ] 
    }), 

} 

그러나 개체가 항상 널 (null)입니다. 나는 이렇게 쿼리하고 있습니다 :

var Schedule = mongoose.model('Schedule', this._schema.Schedule); 

Schedule.findById({'game._id' : req.params._id}).exec(function(err,gameDetail){...}); 

스키마와 모델을 선언 할 때 나는 잘못하고 있습니까? 사람들이 내가하는 일을 정확하게 수행하는 것처럼 보이는 수많은 예를 보았습니다. 어떤 도움이라도 대단히 감사하겠습니다! 미리 감사드립니다.

+0

아직 아무런 문제가 없습니다. 나는 몽구스 3.0.0을 사용하고 있다고 덧붙인다. –

답변

2

몽구스 모델의 findById 메서드는 메서드에 대한 첫 번째 매개 변수로 제공된 _id을 사용하여 해당 모델의 인스턴스를 찾는 데 사용됩니다. 따라서 Schedule.findByIdSchedule 인스턴스를 반환하고 개별 Game 인스턴스는 반환하지 않습니다. Schedule.findOne({'game._id' : req.params._id}, ...Schedule 인스턴스 이고 해당 id가 Game인데, Game 인스턴스를 id로 쿼리해야하는 경우 Schedule에 삽입하는 대신 별도의 컬렉션에 보관해야합니다.

+0

감사합니다. 조니 실제로 게임을 다른 컬렉션으로 옮겼습니다. 그리고 이것은 내가 가진 문제를 해결했습니다. –

0

코드를 보면, 내 첫 번째 추측은 실질적으로 사용자의 findById이 올바르게 구조화되지 않은 것입니다.

먼저 ID를 얻으려면 req.params._id 값을 사용하고 있습니다. 제가 본 코드 예제와 코드는 라우터에 :id을 사용합니다. 실제로는 찾고있는 ID가 req.params.id에 저장되어 있습니다. 코드에서 확인해야합니다.

두 번째로 findById는이 ID로 일정을 찾는 데 유용합니다. 일반적인 찾기 만 사용해보십시오.

마지막 생각 : {'game._id' : req.params._id} 끝에 닫는 중괄호가 없습니다.

그 점에 도움이되기를 바랍니다. :)

+0

답장을 보내 주셔서 감사합니다. 나는 다음과 같이 썼다 : _id는 내 경로에 있고 값은 console.log()와 맞는지 점검하고있다. 나는 그것을 찾으려고 노력할 것이고, 그것이 어떻게되는지 보게 될 것이다. –