2011-04-28 3 views
10
> db.users.findOne(); 
{ 
    "_id" : ObjectId("4db8ebb4c693ec0363000001"), 
    "fb" : { 
     "name" : { 
      "last" : "Sss", 
      "first" : "Fss", 
      "full" : "Fss" 
     }, 
     "updatedTime" : "2011-04-27T09:51:01+0000", 
     "verified" : true, 
     "locale" : "en_US", 
     "timezone" : "-7", 
     "email" : "[email protected]", 
     "gender" : "male", 
     "alias" : "abc", 

     "id" : "17447214" 
    } 
} 

그래서 내 Mongo 개체입니다. 이제 몽구스를 통해 그것을 찾고 싶습니다.Mongoose에서 어떻게 쿼리를 수행합니까?

User.findOne({ gender: "male" }, function(err, docs){ 
    console.log(err); //returns Null 
    console.log(docs); //returns Null. 
}); 

그건 작동하지 않습니다! 어느 쪽도 아니야 :

User.findOne({ fb: {gender:"male"} }, function... 

Null, null.

이 내 전체 일 :

app.get('/:uid',function(req,res){ 
    params = {} 
    User.findOne({ $where : "this.fb.gender == 'male' " }, function(err, docs){ 
     console.log(docs); 
    }); 
    res.render('user', { locals:params }); 
}); 
+0

'사용자'는 어디에 정의되어 있습니까? – Gobliins

답변

7

이 시도 :

User.findOne({ $where : "this.fb.gender == 'male' " }) 

또는

User.findOne({ fb.gender : "male" }) 
+0

감사! 왜 내가이 오류를 실행하는지 알 수 있습니까? : 디버그 : TypeError : HTTPServer에서 정의되지 않은 의 'auth'속성을 읽을 수 없습니다. TIMEX

+0

전혀 모르겠다. NodeJs를 전혀 사용하지 않았으므로 mongodb 자바 스크립트 환경을 기반으로 쿼리를 제공했다. – DhruvPathak

+0

이것은 대답이 아닌 것처럼 보이지만 받아 들여집니다. –

43

내가 몽구스의 저자 중 하나입니다. 당신은 여러 가지 방법 중 하나를 사용하여이 쿼리를 수행 할 수 있습니다

  • find 구문

    User.findOne({'fb.gender': 'male'}, callback); 
    
  • where 구문

    User.where('fb.gender', 'male').findOne(callback); 
    
  • 라는 이름의 범위 구문

    UserSchema.namedscope('male').where('fb.gender', 'male'); 
    // ... 
    var User = mongoose.model('User', UserSchema); 
    
    // Now you can write queries even more succinctly and idiomatically 
    User.male.findOne(callback); 
    
+1

namedScope가 Mongoose에서 삭제되었지만 흉내낼 수있는 플러그인을 만들었습니다 : https://github.com/gberger/mongoose-named-scopes – gberger

관련 문제