2012-12-01 38 views
5

Tôi đang làm việc trên ứng dụng nodejs/express với Mongodb trên chương trình phụ trợ. Trong một trong các cuộc gọi API của tôi, tùy thuộc vào sự hiện diện của một tham số chuỗi truy vấn cụ thể hoặc thông số khác tôi muốn đưa ra truy vấn đến Mongodb với $ gt hoặc $ lt.Truy vấn động trong MongoDB và Node.js

Trong một số trường hợp, chúng tôi muốn yêu cầu mọi thứ nhỏ hơn tokenId bằng $ lt, nhưng trong các trường hợp khác, chúng tôi muốn mọi thứ lớn hơn tokenId sử dụng $ gt. Làm thế nào để chúng tôi làm điều đó mà không cần sao chép các truy vấn?

Dưới đây là một truy vấn Ví dụ:

collection.find({'film_id': {$in : genre}, '_id': {$lt: tokenId}}).sort({'_id': -1}).limit(25).toArray(function(error, films) 

Có cách nào để tự động tạo ra các truy vấn mà không thực sự làm 2 truy vấn khác nhau?

Trả lời

15

Xây dựng đối tượng truy vấn của bạn cách lập trình:

var query = {'film_id': {$in : genre}}; 
if (param) { 
    query._id = {$lt: tokenId}; 
} else { 
    query._id = {$gt: tokenId}; 
} 
collection.find(query).sort({'_id': -1}).limit(25).toArray(function(error, films); 

Cập nhật

Bây giờ Node.js 4+ hỗ trợ computed property names, bạn có thể tạo query trong một bước như:

var query = { 
    film_id: {$in: genre}, 
    _id: {[param ? '$lt' : '$gt']: tokenId} 
}; 
0

Mã trên có thể không hoạt động. Truy vấn động ở trên sẽ được giải quyết theo Ex. Mã là một số nguyên 35.

collection.find("_id":"{$gt: 35}") 
      .sort({'_id': -1}).limit(25).toArray(function(error, films); 

dẫn đến Lỗi

Cú pháp đúng nên là:

collection.find("_id":{$gt: 35}). 

Các đôi "" dấu ngoặc kép không nên có mặt ở đó.

+0

Chào mừng bạn đến với SO. Bài đăng của bạn phải là nhận xét hoặc có thể là bản chỉnh sửa chứ không phải là câu trả lời. Hoặc nếu bạn vẫn bị kẹt, vui lòng đăng câu hỏi mới. –

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