2

Node.js を介して HTML コードに表示するために、MongoDB のデータを使用したいと考えています。これまでのところ、HTML5 フォーミュラーから MongoDB に情報を挿入する方法と、この情報を読み取る方法を知っていますが、私の結果find()は次のようになります。

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

node.exeこれは、関数の cmdshell に表示される簡単な結果の例です。

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

Peopleは Mongoose スキーマであり、いくつかの属性があります。この例では、エンティティが 1 つだけ保存されているすべての名前のみを検索していますPeople

問題は、私はそれを永遠に探したいと思っているのですが、どうすればMr. Banana全体なしで抽出することができるの[{ name: and id}]でしょうか? なんらかの機能やオプションがあると思いますが、見つけられません! leftstr などでトリムする関数を発明することができました。これは私の緊急の解決策です。

4

2 に答える 2

3

name結果の最初のドキュメントのプロパティのみを出力したい場合:

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

_id返されたドキュメントに が含まれないようにしたい場合は、この投稿を参照してください。

于 2012-07-26T13:57:33.007 に答える
1

マングースにはクエリストリームと呼ばれる関数があるというヒントがあります。それが私の解決策につながります。

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関数を使用した後、データベースからすべてをmails [1]のような配列に入れました。これは、mongodbの2番目のエントリのメールです。これにより、関数を使用してデータベースのコンテンツ全体を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;
    }

したがって、htmlコードを作成するときに、この関数をnodejsに追加する必要があります。

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();     

好き :)

于 2012-08-01T11:25:08.430 に答える