节点js / Mongoose .find()

时间:2018-01-15 00:46:27

标签: javascript node.js mongoose

我在节点js服务器上使用mongoose中的.find()函数时遇到了麻烦我一直在尝试使用它但我无法从我的数据库中获取关键信息。

user.find({key: 1} , function(err, data){
  if(err){
    console.log(err);
  };
  console.log("should be the key VVV");
  console.log(data.key);
});

我主要是在解决这个函数如何接受查询并让你从数据库中回复响应时遇到麻烦。如果有人可以分解它,请非常感谢mongoose docs没有多大帮助。

如果有帮助,这也是我的用户架构

var userSchema = new mongoose.Schema({
  username: {type: String, unique: true},
  password: {type: String},
  key: {type: String},
  keySecret: {type: String}
}, {collection: 'user'});


var User = mongoose.model('user',userSchema);

module.exports = User;

3 个答案:

答案 0 :(得分:6)

如果您认为您的数据库看起来像这样:

[
    {
        "name": "Jess",
        "location": "Auckland"
    },
    {
        "name": "Dave",
        "location": "Sydney"
    },
    {
        "name": "Pete",
        "location": "Brisbane"
    },
    {
        "name": "Justin",
        "location": "Auckland"
    },
]

执行以下查询;

myDB.find({location: 'Brisbane'})

将返回:

[
    {
        "name": "Pete",
        "location": "Brisbane"
    }
]

虽然myDB.find({location: 'Auckland'})会给你

[
    {
        "name": "Jess",
        "location": "Auckland"
    },
    {
        "name": "Justin",
        "location": "Auckland"
    },
]

正如您所看到的,您正在通过数组查找与您find匹配的密钥匹配的密钥,并返回与该密钥搜索匹配的所有文档。数组的形式。

Mongoose接口以回调的形式向您提供此数据,您只需要查找它返回的数组中的项目

user.find({location: "Auckland"}, function(err, data){
    if(err){
        console.log(err);
        return
    }

    if(data.length == 0) {
        console.log("No record found")
        return
    }

    console.log(data[0].name);
})

答案 1 :(得分:1)

也许你应该使用

Model.findOne({key: '1'}, function(err, data) {
  console.log(data.key);
});

find()会获得一个doc数组,而findOne()只能获得一个doc。

您的字段keyString类型,因此您的查询对象应为{key: '1'},而不是{key: 1}

仔细阅读mongoose文档可能对您有帮助。

答案 2 :(得分:0)

嗨,我的朋友,我使用此方法从数据库中检索数据我希望能对您有所帮助

user.find({key: 1})
    .then((userOne)=>{
//if is an API
        res.status(200).json({data : userOne});
//OR
// if you had a view named profile.ejs for example
res.render('/profile',{data : userOne, title : 'User profile' }); 
        console.log(userOne); // just for check in console
    })
    .catch((error)=>{
//if an api
res.status(400).json({messageError : error});
// OR
if not an api
res.render('/profile',{data : 'No data of this profile',errorToDisplay : error})
});
});