2012-07-26 2 views
2

Node.js를 통해 HTML 코드를 표시하기 위해 MongoDB의 데이터를 사용하고 싶습니다. 지금까지, 나는 나의 MongoDB를에 HTML5의 포뮬러 정보를 삽입하는 방법을 알고 나는이 정보를 읽는 방법 -하지만처럼 내 find()의 결과는 : 이것은 단순한 결과의 예를 표시 내 node.exemongodb mongoose find - 결과로 적용 가능한 문자열을 얻는 방법은 무엇입니까?

[ { name: 'Mr. Banana', _id: 123aclongvalueinHEX001c000001 } ] 

함수의 cmdshell :

People.find(
    {}, 
    ['name'], 
    function(err, docs) { 
     if (!err){ 
      console.log(docs); 
     } 
     else { throw err;} 
    } 
); 

People은 몽구스 스키마이고 나는 단지 People에 저장된 하나의 엔티티와 모든 이름을 검색하고이 예에서는 몇 가지 특성이 있습니다.

궁금한 점이 있다면 영원히 그것을 찾으려는 것일뿐입니다. 전체를 [{ name: and id}]없이 추출하는 방법은 무엇입니까? 나는 거기에 몇 가지 기능이나 옵션이 있다고 생각하지만, 나는 그것을 찾을 수 없다! 나는 좌타자 등으로 그것을 다듬기위한 기능을 발명 할 수 있었다. 이것은 나의 비상 사태 해결책이 될 것이다.

답변

1

몽구스에는 querystreams라는 기능이 있다는 힌트가 있습니다. 그게 내 해결책으로 이어진다.

var Bericht = new Schema({ 
    name  : String 
    , mail  : String 
    , standort : String 
    , betreff : String 
    , inhalt : String 
    , datum : Date 
}); 
var Bericht = mongoose.model('Bericht', Bericht); 

    var stream = Bericht.find().stream() 
    , names = [] 
    , mails = [] 
    , standorts = [] 
    , betreffs = [] 
    , inhalts = [] 
    , datums = [] 
    , i=0; 

function closeHandler() { 
    function closeHandler() { 
     console.log(JSON.stringify(names)); 
    }; 
    stream.on('data', function (doc) { 
      if (doc.name) { 
     names.push(doc.name); 
     mails.push(doc.mail); 
     standorts.push(doc.standort); 
     betreffs.push(doc.betreff); 
     inhalts.push(doc.inhalt); 
     datums.push(doc.datum); 
     } 
    }) 
    stream.on('close', closeHandler) 

내 스키마의 이름이 6 개보다 많습니다. stream.on 함수를 사용한 후에, 내 데이터베이스에서 모든 것을 maiodb에있는 두 번째 항목의 메일 인 mails [1]와 같은 배열로 가져 왔습니다. 이를 통해 함수를 사용하여 데이터베이스의 전체 내용을 html로 쉽게 표시 할 수 있습니다. 어쩌면이 부분이 너무 많을 지 모르지만이 게시판을 좋아하기 때문에이 글을 작성하겠습니다. 이 기능을

, 당신은 반환 값으로 모든 이름의 간단한 테이블을 구축 :

function namestable(){ 
     value = "<table border='1'><tr><th>Namen</th></tr>" 
     for(var i=0;i<names.length;i++){ 
    value+="<tr><td>"+names[i]+"</td>"; 
     ;} 
     value+="</table>"; 
    return value; 
    } 

그래서 당신이 당신 nodejs에이 기능을 추가해야합니다, 당신은 html 코드를 작성하는 경우 :

var body = '<html>'+ 
    '<head>'+ 
    '<meta http-equiv="Content-Type" content="text/html; '+ 
    'charset=UTF-8" />'+ 
    '</head>'+ 
    '<body>'+ 
    '<form action="/upload" method="post">'+ 
    namestable()+ 
    '<input type="submit" value="Hario" />'+ 
    '</form>'+ 
    '</body>'+ 
    '</html>'; 

     response.writeHead(200, {'Content-Type': 'text/html'}); 
     response.write(body); 
     response.end();  

내가 좋아하는 :)

3

만 출력 결과의 첫 번째 문서의 name 재산하려면 : 당신도 반환 문서에 포함되는 것을 _id을 방지하려면

console.log(docs[0].name); 

, this post를 참조하십시오.

+0

안녕하세요, 귀하의 빠른 답변을 주셔서 감사합니다,하지만이 "정의되지 않은"출력에 연결됩니다. 나는 docs.name이 나에게 속성 이름의 정보만을 줄 수 있다고 생각했지만 잘못된 것이므로 여러분은 그렇게 보인다. 그러나 당신이 향하고있는 방향, 나는 좋아한다.) – Sebastian

+1

"console.log (docs [0]);" "_id : xxx ... xxx"값만 있으므로 속성 이름이없는 것으로 보입니다. "console.log (docs);"를 실행하면 결과는 "[{name : 'Mr. Banana', _id : 123aclongvalueinHEX001c000001}]"이므로 단일 항목을 호출하면 이름이 손실됩니다. 기묘한. 그러나! 내가 "console.log (docs.name);" 결과는 또한 정의되지 않습니다 ... 꽤 짜증나게합니다. – Sebastian

+0

cmdshell을 실행할 때와 같은 이상한 동작을 보았습니다. 사용중인 것을 볼 수 있습니다. 프로그램을 파일에 넣고 셸 외부에서 실행 해보십시오. – JohnnyHK

관련 문제