2012-03-12 22 views
22

Tôi đang lưu trữ một số dữ liệu trong một Mongodb và truy cập nó bằng js/nodejs và mongoose. Tôi có thể sử dụng .find() để tìm một cái gì đó trong cơ sở dữ liệu tốt, đó không phải là một vấn đề. Vấn đề là gì nếu không có gì đó, tôi muốn làm điều gì đó khác. Hiện nay đây là những gì tôi đang cố gắng:Làm điều gì đó nếu không tìm thấy gì .find() mongoose

UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log(err) }; 
    users.forEach(function (user) { 
    if (user.nick === null) { 
     console.log('null'); 
    } else if (user.nick === undefined) { 
     console.log('undefined'); 
    } else if (user.nick === '') { 
     console.log('empty'); 
    } else { 
     console.log(user.nick); 
    } 
    }); 
}); 

Không ai trong số những hỏa hoạn khi tôi làm điều gì đó nơi act.params sẽ không có trong chỉ mục nick. Tôi không nhận được bất cứ điều gì để giao diện điều khiển ở tất cả khi điều này xảy ra, nhưng tôi nhận được user.nick để đăng nhập tốt khi nó thực sự ở đó. Tôi chỉ cố gắng làm điều đó ngược lại như sau:

UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log('noooope') }; 
    users.forEach(function (user) { 
    if (user.nick !== '') { 
     console.log('null'); 
    } else { 
     console.log('nope'); 
    } 
    }); 
}); 

nhưng điều này vẫn không ghi nope. Tôi đang thiếu gì ở đây?

Nếu nó không tìm thấy, nó chỉ bỏ qua mọi thứ trong cuộc gọi tìm, điều đó là tốt, ngoại trừ tôi cần phải làm mọi thứ sau đó nếu nó không có ở đó mà tôi không muốn làm nếu nó được. :/

Trả lời

63

Khi không có kết quả phù hợp nào tìm thấy() trả về [], trong khi findOne() trả lại null. Vì vậy, hoặc sử dụng:

Model.find({...}, function (err, results) { 
    if (err) { ... } 
    if (!results.length) { 
     // do stuff here 
    } 
} 

hay:

Model.findOne({...}, function (err, result) { 
    if (err) { ... } 
    if (!result) { 
     // do stuff here 
    } 
} 
+5

Thực hiện câu trả lời này để giải thích sự khác biệt trong những gì được trả về giữa 'find()' và 'findOne()' và cung cấp câu trả lời! – Rob

8
UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log(err) }; 
    if (!users.length) { //do stuff here }; 
    else { 
    users.forEach(function (user) { 
     console.log(user.nick); 
    }); 
    } 
}); 

là những gì tôi tìm thấy hoạt động.

+0

này không làm việc cho tôi, chỉ có if (users.length!) –

+1

Những điều có lẽ đã thay đổi kể từ năm 2012. Tôi sẽ cố gắng này ra một lần nữa tối nay khi tôi về nhà, và nếu điều này không làm việc và users.length nào, tôi sẽ chỉnh sửa câu trả lời để bao gồm nó. – Rob

5

tôi đã phải sử dụng:

if(!users.length) { //etc } 

để làm cho nó làm việc.

Các vấn đề liên quan