Trước hết, tôi hy vọng bạn biết điều đó để thực hiện $text
các truy vấn dựa trên bạn cần có chỉ mục dựa trên văn bản trên trường cụ thể đó.
Thứ hai, bạn dường như đang nhầm lẫn giữa các cuộc gọi lại và lời hứa -
Như tôi có thể thấy query()
của bạn hàm vẫn trả về một lời hứa khi bạn đang gọi query()
mà bạn đang mong đợi cuộc gọi lại. Những lời hứa được trả lại ngay cho bạn và sau đó bạn cần phải giải quyết chúng.
Mã của bạn sẽ giống như thế này -
dbHelper.query(mongoose.model('events'), {$text: {$search: "Ade"},'place.location.country': "Australia"})
.then(function(result)){
// you have your data here
}
.catch(function(err)){
// an error occured
}
Đọc thêm về Lời hứa tại đây .
Một lỗi nhỏ khác mà tôi có thể nhận thấy là trong query()
phương pháp. Câu lệnh if statement
không sử dụng dấu ngoặc nhọn và kết quả là chỉ có câu lệnh tiếp theo sau câu lệnh if statement
sẽ được thực thi dưới if statement
mệnh đề. Câu lệnh thứ hai sau if statement
sẽ luôn được thực thi -
Vì vậy,
if(error)
console.log(error);
// always executed
reject(error);
resolve(data);
nên -
if(error){
console.log(error);
reject(error);
}
resolve(data);
Tôi vẫn không chắc tất cả những điều này sẽ có thể làm cho mã của bạn hoạt động vì tôi không thể xem toàn bộ bức tranh ở đây. Tôi IMHO khuyên bạn nên đầu tư thêm thời gian để tìm hiểu các kiến thức cơ bản về javascript và MongoDB. Sẽ giúp bạn tiết kiệm rất nhiều thời gian. Và đối với vấn đề đó tài liệu chính thức của MongoDB thực sự tốt.