Mongoose find()返回未定义的属性和奇怪的对象

时间:2015-07-03 15:33:15

标签: javascript node.js mongoose

我有一个我无法解决的错误,因为它第一次发生在我身上。

这是我的查询:

    Pack.find(
            {idclient: clientId }
        )
        .populate({
            path: 'cards',
            options: { sort: { 'position': 1 } }
        })
        . exec(function(err,pack){
            if(err){
                console.log(err);
            }else{

                 ///
                // here are my logs

                callback(pack);
            }
        });

当我尝试使用console.log(pack)时,我可以看到一个奇怪的返回\ n

{ __v: 1,\n  _id: 5596a859240cbd3832123b27,\n  grouped: 0,\n  idclient: \'4Z8OrisV2AMLZn_lAAAA\',\n  matId: 5596a859240cbd3832123b26,\n  reversed: 0,\n  roomId: 5596a859e37d7e7099cec1e6,\n  shuffled: 0,\n  type: \'hand\',\n  cards: [ 5596a859240cbd3832123b28, 5596a85c240cbd3832123b5d ],\n  date: Fri Jul 03 2015 17:20:57 GMT+0200 (CEST),\n  iscut: 0 }
通常,我可以看到一个很好的格式化Json对象。

所以,当我尝试:

console.log(pack.property)=>未定义......

有人遇到过这个问题吗?

由于

3 个答案:

答案 0 :(得分:3)

这一部分的两个部分......

首先,来自Mongoose find的回调返回一个数组... findOne将返回一个对象。

就新行而言,mongoose文档为console.log提供了一个toString()帮助器。它可能会添加可读性换行符。在调用console.log之前将输出包装在JSON.stringify(即 console.log(JSON.stringify(pack)) 中,您将看到该文档为没有换行符的字符串。 - http://mongoosejs.com/docs/api.html#document_Document-toString

答案 1 :(得分:0)

find()返回一个数组,所以请使用findOne(),感谢Adam Wysocki。

有时我是愚蠢的开发者。

答案 2 :(得分:0)

Told Model.find()生成一个数组,所以这就是我处理这种情况的方法:

Kitten.find(function (err, kittens) {
    if (err) return console.error(err);
    kittens.forEach(function(kitten){
       console.log(kitten.name);
    }); 
});

在我看来,这是访问属性最明确的方式