我的UserModel没有返回正确的用户数据查找_id?

时间:2017-07-27 05:34:50

标签: javascript mongoose

这是我的代码:

var user = UserModel.findOne({ _id: decodedToken.id, }, function (err, user) {
                  if (err) return handleError(err)
                  console.log('inside UserModel user = ', user) // this is what I want to return on the variable user
                });

console.log("Outside userModel = ",user) // the user inside the findOne callback isn't assigned on the variable user?

在UserModel.findOne回调中,它返回正确的用户:

{ _id: 5979744a02bcec1dc873a96c,
  updatedAt: 2017-07-27T05:04:10.313Z,
  createdAt: 2017-07-27T05:04:10.313Z,
  fullName: 'kring kring',
  email: 'sofbaculio@gmail.com',
  password: '$2a$08$yiDO.HBGoieBApY8VCHA/Opp6PEpq7.CwZmfc2CkQmQoRfB/ySi4u',
  __v: 0,
  active: true }

但在回调之外它会返回如下内容:

 Query {
  _mongooseOptions: {},
  mongooseCollection:
   NativeCollection {
     collection: Collection { s: [Object] },
     opts: { bufferCommands: true, capped: false },
     name: 'user',

帮助?

3 个答案:

答案 0 :(得分:1)

这是因为你的函数实际上返回了一个Mongoose查询,稍后你可以使用它来调用方法exec并使用它来获得结果。

您现在需要执行该查询以获得结果:

user.exec(function(err,result){
   if(err)
      return console.log(err);
   console.log(result);
});

您可以阅读有关使用Mongoose @ http://mongoosejs.com/docs/queries.html

查询的更多信息

答案 1 :(得分:0)

问题是它是一个异步调用,因此在这种情况下你必须实现一个实现此目的的承诺。

此外,如果您要使用mongo Object Id(即_id)在模型中找到,那么您应该使用UserModel.findById(decodingToken.id)而不是UserModel.findOne({_ id:decodingToken.id,}。并且下次当你想通过Object Id查询一个集合时,只需去看看Model.findById这是一个很好的做法。希望它有所帮助。

答案 2 :(得分:0)

确定按照这些步骤逐一进行,我正尽力帮助您。

首先你需要安装q库来实现promise。你可以使用

安装它

npm install q

    getUser(decodedToken.id).then(function(res){
    console.log(res);
    var user = res;
    //Just do it here what ever you want to do 
    },function(err){
    console.log(err)
    })

    //Here is your promise that you going to return
    function getUser(id) {
    return Q.Promise(function(resolve, reject) {
    UserModel.findById(decodedToken.id), function (err, user) {
                  if (err) return reject(err)
                  console.log('inside UserModel user = ', user)
                  resolve(user)
                });
     })
    }