【问题标题】:Can't retrieve just names from the database using mongoose无法使用猫鼬从数据库中检索名称
【发布时间】:2016-12-27 11:11:36
【问题描述】:

我想获取数据库中所有name 键的值。我只有一个键(字段),它是数据库每个文档中的“名称”键。这是代码。我最需要帮助的代码是从

开始的底部

user.find({}, 'name', function(err, users){...

当我使用user.name 时,我得到了未定义。

当我使用var html = "All users" + users + '<br>'; 时,我得到了对象/文档的列表。我只想要名字的值

目标:当用户输入他们的名字并提交时。下一页显示数据库中的所有名称,包括刚刚输入的名称。

mongoose.connect('mongodb://localhost/Company');

var Schema = new mongoose.Schema({
    name : String
})

var user = mongoose.model('emp', Schema);

app.get('/', function(req, res){
    var html = '<form action="/" method = "post">' + 
                'Enter your name:' + 
                '<input type = "text" name = "userName" placeholder= "...." />'+
                '<br>' + 
                '<button type = "submit">Submit</button>' +
                '</form>';
    res.send(html);
});

app.post('/', function(req, res){
    var html = "";
    var userName = req.body.userName;

    new user({
        name : req.body.userName
    }).save(function(err, doc){
     if(err){
        res.json(err);
     } else{
        user.findOne({'name' : userName }, 'name', function(err, user){
            if(err) return handleError(err);
    var html = "Hello: " + user.name + '.<br>' +
                '<a href="/">Try again</a>';

        });
     }

     // here is the code I need help with
     user.find({}, 'name', function(err, users){
        var html = "All users" + users.name + '<br>';
        res.send(html);
     });



    })
});
var server = app.listen(80, function(){
    console.log('Listening on port %d', server.address().port);
})

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    'name' 选择器添加到find 调用会限制users 数组中文档的属性,但它仍然是文档对象数组,而不是字符串。要将其映射到仅包含 name 字符串的数组中,您可以调用 JavaScript 的 map 函数,该函数适用于所有数组:

     user.find({}, 'name', function(err, users){
        var html = "All users" + users.map(function(doc) {
            return doc.name + '<br>';
        });
        res.send(html);
     });
    

    【讨论】:

    • 感谢您的回复,这行得通。我只是想在结束问题之前看看是否有其他方法可以做到这一点。
    【解决方案2】:

    我知道 underscore 有一个名为 pluck 的方法,它可以执行您想要从对象集合中获取所有名称对象的操作。 Mongo 模型列表可能带有该方法,但我不确定。

    _.pluck([{name: 'jo', hair: 'brown'}, {name: 'cody', hair: 'blond'}],'name')
    
    => ['jo','cody']
    

    你可以试试 mongo 集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2020-05-16
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      相关资源
      最近更新 更多