【问题标题】:mongodb mongoose find - how do I get applicable strings as result?mongodb mongoose find - 我如何获得适用的字符串作为结果?
【发布时间】:2012-07-25 02:58:51
【问题描述】:

我想使用我的 MongoDB 中的数据通过 Node.js 在 HTML 代码上显示。到目前为止,我知道如何将来自 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 模式并具有一些属性,在此示例中,我仅搜索所有名称,并且仅在 People 中保存一个实体。

所以问题是,我想永远寻找它,我如何只提取 Mr. Banana 而没有整个 [{ name: and id}] - 东西?我想它有一些功能或选项,但我找不到它!我可以发明一个函数来通过 leftstr 等来修剪它。这将是我的紧急解决方案。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    如果您只想在结果中输出第一个文档的name 属性:

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

    如果您想阻止 _id 甚至包含在返回的文档中,请参阅 this post

    【讨论】:

    • 嗨,感谢您的快速回答,但这会导致输出“未定义”。我以为自己 docs.name 可以只给我属性名称的信息,但我错了,所以你似乎是。但你前进的方向,我喜欢;)
    • 如果我执行“console.log(docs[0]);”只有值“_id:xxx ...xxx”所以似乎没有属性名称。当我执行“console.log(docs);”时,结果是“[ { name: 'Mr. Banana', _id: 123aclongvalueinHEX001c000001 } ]”,因此调用单个条目会丢失名称。诡异的。但!如果我执行“console.log(docs.name);”结果也是未定义的......很烦人。
    • 我在 cmdshell 中运行时看到了一些类似的奇怪行为,我知道这就是您正在使用的。尝试将您的程序放入一个文件并在 shell 之外运行它。
    • @JohnnyHK 我也得到了一个字符串作为结果。看来我需要做JSON.parse(JSON.stringify(docs[0])); 但我不知道为什么。有什么想法吗?
    【解决方案2】:

    我得到了提示,mongoose 具有称为查询流的函数。这导致了我的解决方案。

    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 中第二个条目的邮件。有了它,我可以使用函数轻松地在 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();     
    

    我喜欢:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2015-01-05
      • 1970-01-01
      • 2013-09-27
      相关资源
      最近更新 更多