为什么对象在输出属性时返回未定义?

时间:2019-09-02 17:54:54

标签: javascript node.js mongodb mongoose

在带有Node js的服务器端,我正在使用Mongoose通过ID查询文档。 我从mongodb查询了一个文档,以使用该文档的ID向其中添加一些数据。但是,当我想使用该文档的de ID时,它是未定义的。这是代码:

user.find({user: req.body.user}, function(err, doc) {

        if(err) {
            console.log(err);
        } else {
            console.log(doc + ' the document');  // Here returns the object with all properties
            console.log(typeof doc + ' type of variable'); // Outputs Object
            console.log(doc._id + ' the ID');              // Undefined
            console.log(doc.user+ ' the user');     //Also undefined

            user.findById(doc._id, function(err, user){
                if(err) {
                    console.log(err);
                } else {
                    console.log(user + ' <---');
                    // for (const iterator of req.body.list) {
                    //     console.log(iterator);
                    //     user.cases = iterator;
                    //     user.save().then(person => {
                    //         console.log('Added')
                    //     })
                    //     .catch(err => {
                    //         console.log('Failed')
                    //     });
                    // }
                }
            })
            // console.log(doc + ' <--- Document');

        }

    });
})

1 个答案:

答案 0 :(得分:3)

猫鼬的Model.find()始终在集合中提供文档,即使只有1个也是如此。此方法是调用Query.find()的简写,它更直接地指出了这一点:

  

结果将是一系列文档。

使用它,您必须先访问集合中所需的文档,然后才能访问_id

user.find({user: req.body.user}, function(err, docs /* note: plural */) {
    if(err) {
        console.log(err);
    } else if (docs.length === 0) {
        console.log('Not found');
    } else {
        console.log(docs[0]._id, 'the user');

        let userDoc = docs[0];
        console.log(userDoc._id, 'the user');

        // ...
    }
});

您也可以使用Model.findOne()来仅取回与查询匹配的第一个/单个文档:

user.findOne({user: req.body.user}, function(err, userDoc) {
    if(err) {
        console.log(err);
    } else if (userDoc == null) {
        console.log('Not found');
    } else {
        console.log(userDoc._id, 'the user');

        // ...
    }
});