2012-10-14 2 views
0

mongoose를 사용하여 mongodb를 쿼리하고 있지만 반환 된 하위 문서가 JSON 대신 Object 유형 인 이유를 이해하지 못합니다.Mongoose, 하위 문서가 json이 아닌 개체입니다.

사용

hero.find({} ,{'deck' : {$elemMatch:{name:'Guard Tower'}}}, function(err, tower) { 
    console.log(tower); 
    } 

반환 ANIM, 크기, 발사체, 업그레이드 등의

[ { _id: 507ac406ba6ecb1316000001, 
    deck: 
    [ { name: 'Guard Tower', 
     description: 'This tower shoots stuff.', 
     cost: 13, 
     sellValue: 7, 
     radius: 180, 
     speed: 40, 
     dmg_min: 0, 
     dmg_max: 0, 
     actual_height: 40, 
     sprite: 'guardtower_red.png', 
     anim: [Object], 
     size: [Object], 
     projectile: [Object], 
     upgrade: [Object] } ] } ] 

하위 문서

, 내가 정보를 얻을 수있는 방법, 내가 중첩 된 정보가 필요 개체입니까? 다른 검색어를 쓰지 않고?

답변

1

모든 docs 및 subdocs는 JavaScript의 개체입니다. console.logutil.inspect을 호출하여 출력용으로 문서의 서식을 지정할 때 기본 깊이 2를 사용합니다. 출력 할 수 있습니다 자신을 util.inspect을 호출하여 문서의 모든 레벨 :

var util = require('util'); 

hero.find({} ,{'deck' : {$elemMatch:{name:'Guard Tower'}}}, function(err, tower) { 
    console.log(util.inspect(tower, false, null)); 
}); 
0

()은 몽구스 문서 (안 JSON)을 반환 것처럼 찾기를 사용하여 몽구스에 쿼리를 만들기. 당신은 POJO를 반환하도록 린() 메서드를 사용할 수 있습니다

hero 
.find({} ,{'deck' : {$elemMatch:{name:'Guard Tower'}}}) 
.lean() 
.exec(function(err, tower) { 
    //tower is a JSON here 
    console.log(tower); 
}); 

을하지만 JohnnyHK가 콘솔 로그에 대한 사실 말했다, 그것은 단지 [오브젝트] 중첩 된 문서를 표시합니다.

업데이트 : .lean()을 사용하면 개체가 반환되고 사용자가 가질 수있는 가상 필드 나 특수 게터는 무시된다는 점에 유의하십시오. 그냥 JSON가

console.log(tower.toJSON()); 

당신이 작동하는 이유에 대해 로드리고 내 의견을 볼 수있을 것입니다 로그 아웃 할 경우

+0

['lean'] (http://mongoosejs.com/docs/api.html#query_Query-lean)을 사용하면 JSON이 아닌 POJO가 반환됩니다. 또한 가상 필드 나 특수 게터 기능이있는 경우 적용되지 않으므로 POJO에 표시되지 않습니다. 스키마에'getters : true '가 있다고 가정하면 몽구스 문서에 대해''toJSON' (http://mongoosejs.com/docs/api.html#document_Document-toJSON) 메소드를'console로 사용하는 것입니다. log (tower.toJSON())' –

+0

예. 그건 사실이야 제이슨. 모든 가상 필드 또는 게터가 누락됩니다. –

0

JohnnyHK는 간단한 방법 그러나 올바른 것입니다.

관련 문제