@Jason Cust すでにかなりよく説明されています-この状況では、多くの場合、最良の解決策は、Usersのクエリを防ぐためにスキーマを変更することです。 別のコレクションに保存されているドキュメントのプロパティによって。
これが私が考えることができる最善の解決策ですが、それはあなたにそれを強制することはありません(あなたはコメントであなたができないと言ったので)。
Users.find().populate({
path: 'email',
match: {
type: 'Gmail'
}
}).exec(function(err, users) {
users = users.filter(function(user) {
return user.email; // return only users with email matching 'type: "Gmail"' query
});
});
ここで行っているのは、emailのみを入力することです。 s一致する追加のクエリ(match .populate()のオプション 電話)-それ以外の場合はemail Usersのフィールド ドキュメントはnullに設定されます 。
残っているのは.filterだけです 返されたusers 元の質問のように、配列-はるかに単純で非常に一般的なチェックのみを使用します。ご覧のとおり、email あるか、ないか。