用于检查猫鼬对象是否包含子字段的函数

时间:2016-06-14 12:37:19

标签: node.js mongodb mongoose

以下代码无法正常工作,我想在我的mongoose findOne查询后检查我的对象中是否定义了一些子文档。

function cleanIfAny(social, value) {
    var name = social + '.id';
    var query = {};
    query[name] = value;

    User.findOne(query, function (err, found) {
        if (err) console.log(err);

        // if the account is already linked somewhere else
        if (found) {
            // detach it from there
            found[social] = undefined;

            // TODO Check if field in document is present
            console.log(found.local + ' ' + found.google + ' ' + found.facebook);
            console.log(isEmpty(found.local)+ ' ' + isEmpty(found.google) + ' ' + isEmpty(found.facebook));
            if( isEmpty(found.local) && isEmpty(found.google) && isEmpty(found.facebook) ) {
                console.log('no more account attached deleting');
                found.remove();
            } else {
                console.log('ok unlink the account');
                found.save(function (err) {
                    if (err) console.log(err);
                })
            }
        }

    })
}

function isEmpty(obj) {
    return (obj == null || Object.keys(obj).length === 0);
}

此代码返回

{} { token: 'abcdefgh, name: 'FirstName LastName', id: '123456789', email: 'myemail@gmail.com' } undefined
false false false
ok unlink the account

而不是这个

true false true

但是我已经在这个范围之外尝试了我的函数和一些简单的变量,并且我的isEmpty()函数的一切都按预期工作。

1 个答案:

答案 0 :(得分:0)

这可能会对你有所帮助:

https://lodash.com/docs#isEmpty

让您一直重新发明轮子。