2016-06-02 3 views
1

mongoose에서 $ in을 (를) 사용하여 레코드를 찾으려고합니다. 그러나 그것은 나를 위해 일하지 않습니다. 나는 몽고에서 동일한 쿼리가 작동 쉘이 있지만 몽구스 년에는

app.services._chkAdminSchool = function(payload){ 
     var deferred = q.defer(); 
     School 
      //.find({ teacher:{$in:['574f20f39f44e7531786c812']}}) 

      .find({_id : "574f1f979f44e7531786c80f",admin:{"$in":[Object("57508a2a3a0a919c16ace3c0")]}}) 
      //.select(filers) 
      .exec(function(error, record) { 
       if (error) { 
        deferred.reject({ 
         status:404, 
         message: 'Error in API', 
         error: error 
        }); 
       } else { 
        if(record.length === 0){ 
         deferred.reject({ 
          message: 'Admin and school doesnot match', 
          data: record 
         }); 
        }else{ 
         deferred.resolve({ 
          message: 'Successfully get Admin', 
          data: record 
         }); 
        } 

       } 
      }); 
     return deferred.promise; 
    } 

기록은 반환 빈 배열입니다 내 스키마

{ 
     "_id": "574f1f979f44e7531786c80f", 
     "name": "mySchool2", 
     "branch": "karachi", 
     "location": "Clifton ", 
     "block": false, 
     "created_at": 1464803223441, 
     "updated_at": 1464803223441, 
     "__v": 0, 
     "classes": [ 
     "574f216afd487958cd69772a" 
     ], 
     "admin": [ 
     "574f20509f44e7531786c811", 
     "57508a2a3a0a919c16ace3c0" 
     ], 
     "teacher": [ 
     "574f20f39f44e7531786c812", 
     "575002b48188a3f821c2a66e", 
     "57500bbaea09bc400d047bf6" 
     ], 
     "student": [ 
     "574f2d56590529c01a2a473b", 
     "574f2e5842c5885b1b1729ab", 
     "574f2ed542c5885b1b1729ae", 
     "574f2f57555210991bf66e07", 
     "574f2fcd087809b11bd8d5e4", 
     "574f301d1f5025d61b7392b6", 
     "574f30481d02afff1bb00c71", 
     "574f30b01d02afff1bb00c74", 
     "574f310038136b3d1cf31b96" 
     ] 
    } 

내 mongose ​​쿼리 를 workinh되지 않습니다. 도움

+0

'var에 SchoolSchema = 새로운 스키마 ({ 이름 : {유형 : 문자열, 필수 : ​​사실 독특한 : TRUE}, 지점 : {형태 : String}, 위치 : {형태 : String}, 블록 : {type : Boolean}, webURL : {type : String}, created_at : {type : Number}, updated_at : {type : Number}, 학생 : {type : Array}, 교사 : {type : 배열}, 관리자 : {type : Array}, 클래스 : {type : Array} }); –

+0

이 내 스키마는 관리자를 찾기 위해 ObjectID와 간단한 ID 문자열을 모두 시도했습니다. 하지만 작동하지 않습니다. –

답변

0

당신이 사용하는 쿼리가 나를 위해 잘 작동 반환, 당신은 다음과 같은 스키마 관리자에 필드를 정의해야합니다 객체에 미리 감사 :

"admin": [{type: mongoose.Schema.ObjectId }] 

는 관리자 배열 객체 인 문자열을 피하기 위해. Object("57508a2a3a0a919c16ace3c0")"57508a2a3a0a919c16ace3c0"과 비교하면 비어있는 배열을 반환하고 확인하고 다시 재생합니다. 감사합니다.

0

학교 스키마를 정의하는 방법에 대해 잘 모르겠지만 idadmin 배열에 String으로 저장하는 경우 몽구스 쿼리에서 Object로 변경할 필요가 없습니다.

School.find({ 
    _id: "574f1f979f44e7531786c80f", 
    admin: { 
    $in : ['57508a2a3a0a919c16ace3c0'] 
    } 
}, functin (err, record) { 
... 
}) 
관련 문제