@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.