【问题标题】:Why the object returns undefined when output property?为什么输出属性时对象返回未定义?
【发布时间】:2020-01-05 17:37:09
【问题描述】:

在使用 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');

        }

    });
})

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    Mongoose 的 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');
    
            // ...
        }
    });
    

    【讨论】:

    • 感谢您的回答,现在问题已经解决了。
    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2019-11-30
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多