2016-06-14 4 views
0

次のコードは正しく動作しません。オブジェクトのサブドキュメントが定義されている場合、mongoose findOneクエリを確認します。代わりに、私のisEmpty(と予想されるように、私はいくつかの簡単な変数と、すべての作業で、この範囲の外で私の機能を試してみましたが、このmongooseオブジェクトにサブフィールドが含まれているかどうかを確認する関数

true false true 

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: '[email protected]' } undefined 
false false false 
ok unlink the account 

) 関数。ホイールのすべての時間を再発明します保存

https://lodash.com/docs#isEmpty

答えて

0

これはあなたに多くを助けるかもしれません。

+0

私はちょうどlodashを試してみましたが、私の関数の中で同じ結果になっています: mongooseの形式の戻り値は、私が期待しているものではないか、関数全体で何か悪いです。 – melkir

+0

私の場合、typeof found、found.local、found.googleおよびfound.facebookは、未定義の – melkir

+0

のドキュメントでも、実際のmongoオブジェクトが格納されている '_doc'プロパティを持っています。キーはトップレベルではありません。 'doc.property === undefined'をチェックするとうまくいくはずです。 – cdbajorin

関連する問題