Mongoose から .populate() を使用して特定のフィールドを返す 質問する

Mongoose から .populate() を使用して特定のフィールドを返す 質問する

クエリを実行した後、MongoDB から JSON 値が返されます。問題は、戻り値に関連付けられたすべての JSON を返したくないことです。ドキュメントを検索してみましたが、これを行う適切な方法が見つかりませんでした。可能であればどうすればよいのか、可能であれば、適切な方法は何でしょうか。例: DB 内

{
    user: "RMS",
    OS: "GNU/HURD",
    bearded: "yes",
    philosophy: {
        software: "FOSS",
        cryptology: "Necessary"
    },
    email: {
        responds: "Yes",
        address: "[email protected]"
    },
    facebook: {}
}

{
    user: "zuckerburg",
    os: "OSX",
    bearded: "no",
    philosophy: {
        software: "OSS",
        cryptology: "Optional"
    },
    email: {},
    facebook: {
        responds: "Sometimes",
        address: "https://www.facebook.com/zuck?fref=ts"
    }
} 

ユーザーにフィールドが存在するが、別のフィールドを返さない場合、フィールドを返す適切な方法は何でしょうか。上記の例では、[email][address]RMS のフィールドと[facebook][address]Zuckerburg のフィールドを返したいと思います。これは、フィールドが null の場合に見つけようとしたものですが、機能していないようです。

 .populate('user' , `email.address`)
  .exec(function (err, subscription){ 
    var key;
    var f;
    for(key in subscription){
      if(subscription[key].facebook != null  ){
          console.log("user has fb");
      }
    }
  }

ベストアンサー1

「フィールドを返す」とはどういう意味かはよくわかりませんが、クエリを使用してlean()出力を自由に変更し、両方のフィールドに値を入力して結果を後処理し、必要なフィールドのみを保持することができます。

.lean().populate('user', 'email.address facebook.address')
  .exec(function (err, subscription){ 
    if (subscription.user.email.address) {
        delete subscription.user.facebook;
    } else {
        delete subscription.user.email;
    }
  });

おすすめ記事