@Jason Cust đã giải thích nó khá tốt rồi - trong tình huống này, giải pháp tốt nhất là thay đổi lược đồ để ngăn Users truy vấn theo thuộc tính của tài liệu được lưu trữ trong bộ sưu tập riêng biệt.
Đây là giải pháp tốt nhất mà tôi có thể nghĩ ra mà sẽ không bắt buộc bạn làm điều đó (vì bạn đã nói trong bình luận rằng bạn không thể).
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
});
});
Những gì chúng tôi đang làm ở đây là chỉ điền email s khớp với truy vấn bổ sung (match trong .populate() gọi) - nếu không thì email trường trong Users tài liệu sẽ được đặt thành null .
Tất cả những gì còn lại là .filter trên users được trả lại , giống như trong câu hỏi ban đầu của bạn - chỉ với việc kiểm tra đơn giản hơn, rất chung chung. Như bạn có thể thấy - email có hay không.