クエリを実行した後、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;
}
});