显示mongoose中特定的数据

时间:2015-06-01 15:46:47

标签: node.js mongodb express mongoose

我在mongodb中有这些数据

 > use mongo
switched to db mongo
> db.users.find();
{ "_id" : ObjectId("556c77c334e275d2ce8b2870"), "fname" : "Carlos", "lname" : "Perez", "telf" : 2316789 }
{ "_id" : ObjectId("556c77e034e275d2ce8b2871"), "fname" : "Juan", "lname" : "Alvarez", "telf" : 2323456 }
{ "_id" : ObjectId("556c780334e275d2ce8b2872"), "fname" : "Roberto", "lname" : "Sabina", "telf" : 2398753 }

这是我的获取路由器

//Model
mongoose.model('users', {fname: String, lname: String; telf: Number});

//Get Router
app.get('/data', function(req, res){
mongoose.model('users').find(function(err, users){
    console.log(users);
    res.send(users);
   });
});

控制台中的结果很好

[ { _id: 556c77c334e275d2ce8b2870,
fname: 'Carlos',
lname: 'Perez',
telf: 2316789 },
{ _id: 556c77e034e275d2ce8b2871,
fname: 'Juan',
lname: 'Alvarez',
telf: 2323456 },
{ _id: 556c780334e275d2ce8b2872,
fname: 'Roberto',
lname: 'Sabina',
telf: 2398753 } ]

但是当我需要特定的数据时,仅举例说明(users.fname)

//Get Router
    app.get('/data', function(req, res){
    mongoose.model('users').find(function(err, users){
        console.log(users.fname);
        res.send(users);
    });
});
控制台中的

显示我未定义数据,而jade模板为空

undefined

为什么会出现这个问题,请帮助我谢谢

2 个答案:

答案 0 :(得分:1)

 mongoose.model('users').find(function(err, users){
    /*
       Here users is an array of objects.
       So, users.fname won't work,
    */

   // This works
   console.log(users[0].fname);

  // or
  for(var i = 0; i < users.length; i++) {
      console.log(users[i].fname);
  }
});

答案 1 :(得分:0)

用户是一个数组。它有索引项,没有键。 您可以使用括号表示法访问项目,例如用户[0]。

一个数组在其原型上也有可以调用的属性,例如: users.length。因此,当您调用users.fname时,它认为您正在尝试访问其原型链上的属性,该属性不存在,因此您未定义。

https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype#Properties

您可以遍历数组并记录每个项目的fname,如此...

   app.get('/data', function(req, res){
     mongoose.model('users').find(function(err, users){
       users.forEach(function(user) {
         console.log(user.fname);    
       };
       res.send(users);
     });
   });

如果这是您需要的唯一数据,您可能还想将fnames从请求返回到mongo ...

http://mongoosejs.com/docs/2.7.x/docs/finding-documents.html

   app.get('/data', function(req, res){
     mongoose.model('users').find({},'fname', function(err, users){
       users.forEach(function(user) {
         console.log(user.fname);    
       };
       res.send(users);
     });
   });