在mongodb中查找属性的结果总是未定义的

时间:2012-07-30 12:31:04

标签: node.js mongodb mongoose

我真的需要帮助。我使用node.js与mongodb和mongoose。到目前为止,我已经设法创建了一个模式并将其保存到我的数据库中。

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

我有一个html公式,我可以用misc传输。字段数据,通过查询字符串将其转换为可读字符串

var bericht_data = { 
name: tempo.Name
, mail: tempo.Mail
, betreff: tempo.Betreff
, inhalt: tempo.Inhalt
};
var testoro = new Bericht(bericht_data);
testoro.save(function (err) {
  if (!err) console.log('Success!');
}); 

所以tempo.Name例如是一个字符串,它也成功保存它。 到目前为止,我可以将这个公式中的所有数据保存到我的mongodb中。

现在问题是:我想将数据作为字符串返回来处理动态html。 要将信息输入我的控制台,我使用

Bericht.find(
{},
{ '_id': 0},
        function(err, docs) {
        if (!err){ 
               console.log(docs);
          // process.exit();
                  }
        else { throw err;}
        }
);

控制台向我提供了我的架构Bericht中保存的所有数据,不包括long _id的东西。样本输出: [{name:'Hans',mail:'hans@wurst.de',betreff:'我丢了我的香肠',inhalt:'看着我,我很棒'}] 这只是一个,通常会有大量的数据。 现在的想法是只将名称提取到像“Hans”这样的字符串中。我想把这个名字变成一个var,但看起来好像不可能! 我试过了

Bericht.find(
{},
{ '_id': 0},
        function(err, docs) {
        if (!err){ 
               console.log(docs.name);
          // process.exit();
                  }
        else { throw err;}
        }
);

但我得到的只是“未定义”。感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

看看Mongoose QueryStreams。我自己还没有使用它,但我已经修改了他们的示例代码以适合您的模型,让您了解它在实践中如何运作:

var stream = Bericht.find().stream()
  , names = []
  , i;

function closeHandler() {
  console.log(JSON.stringify(names));
};

stream.on('data', function (doc) {
  if (doc.name) {
    names.push(doc.name);
  }
})

stream.on('error', function (err) {
  // handle err
})

stream.on('close', closeHandler)

答案 1 :(得分:0)

Mongoose find返回一个文档数组,因此您应该尝试以下操作:

Bericht.find(
 {},
 { '_id': 0},
    function(err, docs) {
     if (!err){
        for(var i=0; i<docs.length; i++)
        {
           console.log(docs[i].name);
        }
      // process.exit();
     }
    else { throw err;}
    }
);