2014-07-16 7 views
0

스키마를 생성 중이며 MongoDB에 문서를 저장하고 있습니다.MongoDB에서 undefined가 반환되지만 문서가 존재합니다. 쿼리가 작동해야합니다

스키마

var userSchema = new Schema({ 

     userID: Number, 
     userName: String, 
     userEmail: String, 
     teams:Array, 
     fbUID: String, 
     googleUID: String, 
     twitter: String 


}); 

문헌 : socialMediID 함수에 전달 된 파라미터

var users = mongoose.model('users',userSchema); 

    if(socialMediaType == "fbUID"){ 
     var user = new users({ 
      userID: id, //give the id of the next user in Dbase 
      userName: userName, 
      userEmail: 'userEmail', 
      teams:[], 
      fbUID : socialMediaID 
     }); 

.

나는 절약 오전 :

user.save(function(err, user){ 
     if(err) return console.error(err); 
     log.d("user saved", user); 
    }); 

내 쿼리 :

function searchUser(socialMediaID, socialMediaType){ 
     var user 

     if(socialMediaType == "fbUID"){ 

      users.findOne({'fbUID': socialMediaID}, function(err, userFound){ 

      if(err) return handleError(err); 
      user = userFound; 
     }); 
return user 

이 같은 사용자 인쇄 할 때 :

log.d("user retrieved from Database", user) 

가 다음과 같이 정의되지 않는다 :

user retrieved from Database undefined 
을내가 터미널에서 검색 할 때 3,691,363,210

이 :

db.users.find() 

내가이 얻을 : 나는 터미널에서이를 검색 할 때

{ "_id" : ObjectId("53c6a25ff34dc62bac05f6e9"), "userName" : "Andressa", "userEmail" : "userEmail", "teams" : [ ], "__v" : 0 } 
{ "_id" : ObjectId("53c6b3dfedf9710db27740b2"), "userName" : "Andressa", "userEmail" : "userEmail", "fbUID" : "1234", "teams" : [ ], "__v" : 0 } 
{ "_id" : ObjectId("53c6b3e0edf9710db27740b4"), "userName" : "Andressa", "userEmail" : "userEmail", "fbUID" : "1234", "teams" : [ ], "__v" : 0 } 
{ "_id" : ObjectId("53c6b3e1edf9710db27740b6"), "userName" : "Andressa", "userEmail" : "userEmail", "fbUID" : "1234", "teams" : [ ], "__v" : 0 } 
{ "_id" : ObjectId("53c6b3e2edf9710db27740b8"), "userName" : "Andressa", "userEmail" : "userEmail", "fbUID" : "1234", "teams" : [ ], "__v" : 0 }' 

:

db.users.findOne({fbUID:"1234"}) 

난이 얻을 :

> db.users.findOne({fbUID:"1234"}) 
{ 
    "_id" : ObjectId("53c6c8b3dc1ea36cb7f5f8e1"), 
    "userName" : "Andressa", 
    "userEmail" : "userEmail", 
    "fbUID" : "1234", 
    "teams" : [ ], 
    "__v" : 0 
} 

누군가 내가 뭘 잘못하고 있는지 알아?

양해 해 주셔서 감사합니다.

+0

을 지옥 콜백

function searchUser(socialMediaID, socialMediaType, cb){ if(socialMediaType == "fbUID") { users.findOne({'fbUID': socialMediaID}, cb); } cb(true); } 

오신 것을 환영합니다 : 간단하게 해결하려면

이에게합니까? – sigurdga

+0

@sigurdga, ​​질문을 업데이트했습니다. – debeka

+1

실제 코드를'user = userFound'하는 예제가 있습니까? 이 경우 비동기 콜백에 값이 설정되면'user'를 반환하려고하기 때문입니다. 예를 들어 [비동기 함수에서 값을 반환하는 방법] (http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function?rq=1)을 참조하십시오. 그것을 해결하십시오. –

답변

2

문제는 당신이 찾기 기능은 콜백을 가지고 C.

같은 자바 스크립트를 코딩, 그래서 당신은 그것에서 값을 반환 할 수 없다는 것입니다.

당신이 할 때 : findOne는 비동기를 실행하기 때문에

users.findOne({'fbUID': socialMediaID}, function(err, userFound){ 
    if(err) return handleError(err); 
    user = userFound; 
}); 
return user; 

반환 값은 null입니다. 문서가 저장 알고 후에는 해당 쿼리를 실행하는 MongoDB의 쉘에서 문서를 찾을 수 :

+0

이제 답변을 받아 들일만한 가치가 있습니다. – debeka

+0

'true'를 인수로 사용합니까? 예를 들어 : cb (true)? – debeka

관련 문제