Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose find仅返回对象的精确属性_Node.js_Mongodb_Mongoose_Find - Fatal编程技术网

Node.js Mongoose find仅返回对象的精确属性

Node.js Mongoose find仅返回对象的精确属性,node.js,mongodb,mongoose,find,Node.js,Mongodb,Mongoose,Find,我在MongoDB中使用Mongoose,我发现了这个问题。我在数据库中找到一个对象,然后只返回object属性,但当我调用变量时,它返回整个对象,而不是想要的属性 var CharacterInDbCounter = await UserModel.findOne({battletag: req.user.battletag}, function(err, user){ if (err) { console.log(err); } else {

我在MongoDB中使用Mongoose,我发现了这个问题。我在数据库中找到一个对象,然后只返回object属性,但当我调用变量时,它返回整个对象,而不是想要的属性

var CharacterInDbCounter = await UserModel.findOne({battletag: req.user.battletag}, function(err, user){
    if (err) {
        console.log(err);
    } else {
        return user.characters
    }
})
console.log(CharacterInDbCounter);
返回:

{ _id: 5a25a14a05656b24accfe231,
  id: 1234,
  battletag: 'Something',
  provider: 'bnet',
  __v: 0,
  characters:
   [ 5a25a14a05656b24accfe218,
     5a25a14a05656b24accfe219,
     5a25a14a05656b24accfe21a,
     5a25a14a05656b24accfe21b,
     5a25a14a05656b24accfe21c,
     5a25a14a05656b24accfe21d,
     5a25a14a05656b24accfe21e,
     5a25a14a05656b24accfe21f,
     5a25a14a05656b24accfe220,
     5a25a14a05656b24accfe221,
     5a25a14a05656b24accfe222,
     5a25a14a05656b24accfe223,
     5a25a14a05656b24accfe224,
     5a25a14a05656b24accfe225,
     5a25a14a05656b24accfe226,
     5a25a14a05656b24accfe227,
     5a25a14a05656b24accfe228,
     5a25a14a05656b24accfe229,
     5a25a14a05656b24accfe22a,
     5a25a14a05656b24accfe22b,
     5a25a14a05656b24accfe22c,
     5a25a14a05656b24accfe22d,
     5a25a14a05656b24accfe22e,
     5a25a14a05656b24accfe22f ] }

为了实现你的目标,你必须以正确的方式去做

不幸的是,当您使用
wait
时,您不能通过承诺
catch
捕获错误
catch
,您必须将代码包围在
try/catch
中以捕获异常,然后在
中检查
用户
参数是否未定义或为空

try {
    var CharacterInDbCounter = await UserModel.findOne({battletag: req.user.battletag})
        .then(function(user) {
            if (!user) {
                // user not found
            }
            return user.characters
        })
    console.log(CharacterInDbCounter);

} catch(e) {
    // catch unexpected errors
}

非常感谢,因为我最不想知道的是如何通过调试任何错误。然后,因为如果我使用函数(err,user)不起作用。像这样?var CharacterInDbCounter=await UserModel.findOne({battletag:req.user.battletag}).then(函数(用户){return user.characters}).catch(函数(err){return“err”;});这个错误处理在var CharacterToSaveCounter=wait CharacterModel.count({owner:req.user.battletag},function(err,count){if(err){console.log(err);}else上面的方法中工作的可能性有多大{返回计数;}})您应该看看这个答案,了解如何让MongoDB只返回您感兴趣的内容:我已经尝试过了,但即使我使用参数来选择我真正想要的内容,它总是返回一个带有_id和字符的对象,默认情况下,除非您在投影参数中说
\u id:0
,我认为这是另一个问题不知道哪一个更好。
try {
    var CharacterInDbCounter = await UserModel.findOne({battletag: req.user.battletag})
        .then(function(user) {
            if (!user) {
                // user not found
            }
            return user.characters
        })
    console.log(CharacterInDbCounter);

} catch(e) {
    // catch unexpected errors
}