2013-04-06 6 views
7

방금 ​​몽구스와 몽고로 놀기 시작했습니다. 다음 코드를 가지고 있습니다 :몽구스 찾기(), 결과 문서에 액세스하는 방법?

var ninjaSchema = mongoose.Schema({ 
    name: String, 
    skill: Number 
}); 

var Ninja = mongoose.model('Ninja',ninjaSchema); 

module.exports = { 
init : function(){ 
    console.log('Connecting to database'); 
    mongoose.connect('mongodb://localhost/mydb'); 
    var db = mongoose.connection; 
    db.on('error', console.error.bind(console, 'connection error:')); 
    db.once('open', function callback() { 
     console.log('Successfully connected!'); 
    }); 
}, 
createNinja : function(name,skill){ 
    var n = new Ninja({name:name,skill:skill}); 
    n.save(function(err,n){ 
     if (err) 
      console.log('saving failed'); 
     console.log('saved '+ n.name); 
    }); 
}, 
getNinjas : function(){ 
    var res = null; 
    res = Ninja.findOne({},'name skill',function(err,docs){ 
     if (err) 
      console.log('error occured in the query'); 
     return 'ninja name: '+docs.name+' ninja skill: '+docs.skill; 
    }); 

    return res; 
} 

데이터베이스에 항목을 추가해도 문제는 없지만 검색하는 데 문제가 있습니다. 나는 모든 것이 어떻게 작동하는지 약간 혼란 스럽다. 내 이해는 다음과 같습니다 :

oop의 클래스와 같은 스키마가 있으므로 데이터베이스의 레코드에 대한 청사진 만 있습니다. 모델은 모델에 메서드를 추가 할 수 있다는 것을 알았으므로 레코드입니다. 음 ... 나는 그것을 어떻게 사용하는지 정말로 모르겠다. 너 진짜 실마리를 줄 수있어?

제목으로 돌아 가기 : find 명령을 실행할 때 익명의 함수를 호출하고 docs가 결과물이어야합니까? 이제 어떻게 액세스 할 수 있습니까? 또한 나는이 문서 물마루 가서 어떻게 내가 Ninja.find(...,function(err,docs){ ... })를 사용하는 경우

{ options: {}, 
safe: undefined, 
_conditions: {}, 
_updateArg: {}, 
_fields: { name: 1, skill: 1 }, 
_geoComparison: undefined, 
op: 'findOne', 
model: 
{ [Function: model] 
base: 
    { connections: [Object], 
    plugins: [], 
    models: [Object], 
    modelSchemas: [Object], 
    options: {} }, 
modelName: 'Ninja', 
model: [Function: model], 
db: 
    { base: [Object], 
    collections: [Object], 
    models: {}, 
    replica: false, 
    hosts: null, 
    host: 'localhost', 
    port: 27017, 
    user: undefined, 
    pass: undefined, 
    name: 'mydb', 
    options: [Object], 
    _readyState: 1, 
    _closeCalled: false, 
    _hasOpened: true, 
    _listening: true, 
    _events: [Object], 
    db: [Object] }, 
schema: 
    { paths: [Object], 
    subpaths: {}, 
    virtuals: [Object], 
    nested: {}, 
    inherits: {}, 
    callQueue: [], 
    _indexes: [], 
    methods: {}, 
    statics: {}, 
    tree: [Object], 
    _requiredpaths: [], 
    options: [Object], 
    _events: {} }, 
options: undefined, 
collection: 
    { collection: [Object], 
    opts: [Object], 
    name: 'ninjas', 
    conn: [Object], 
    queue: [], 
    buffer: false } } } 

: 지금부터 나는 다음 내가 얻을 고해상도를 로그인하는 경우? 또는 내 기록을 어떻게 검색합니까?

답변

15

오류를 발견했습니다. 더 많은 개념적인 개념이었습니다. 저는 비동기 호출을 다루고 있으며 다른 함수에서 결과를 반환하려고 시도하고 있으며 실행 시점을 모릅니다. 그래서 어떻게됩니까 db 쿼리를 실행하고 null로 밝혀지는 결과를 반환하는 요청을 만듭니다. 이 코드 :

getNinjas : function(){ 
    var res = null; 
    Ninja.find({},'name skill',function(err,docs){ 
     if (err) 
      console.log('error occured in the database'); 
     console.log(docs); 
    });  
    return res; 
} 

은 null을 반환하지만! console.log (docs)는 내가하려고했던 데이터베이스의 모든 값을 콘솔에 출력합니다. 이제 변경을해야하며 결과 수신시 콜백이 전달됩니다. 변화와

코드는 다음과 같습니다

getNinjas : function(res){ 
    var twisted = function(res){ 
     return function(err, data){ 
      if (err){ 
       console.log('error occured'); 
       return; 
      } 
      res.send('My ninjas are:\n'); 
      console.log(data); 
     } 
    } 

    Ninja.find({},'name skill',twisted(res)); 
} 

그래서 같이 내가

+1

아 당신이 나를 이길 :) 내 닌자의 이름을 보낼 수 있도록 응답 개체를 전달할 수 있어요 그것. 나는 너에게 좋은 대답을하려고 노력했지만, 너는 그것을 얻었다. 결과를 전송하는 콜백을 전달하고자 할 것입니다. – numbers1311407

관련 문제