2016-03-22 23 views
3

soru başlık aşağıdaki ulaşmak için çalışır sorgu yapmaya çalışıyor benim şimdiki yaklaşımı özetlemektedir olarak boş bir dize ile $ metin arama çalışması:mongodb tek bir Doları maddesi veya

"tüm belgeleri bulun boş bir dize kullanıcı tarafından gönderilirse

var query = { 
      $or: [ 
       { $text: { $search: searchText } }, 
      ], 
      $and: [ 
       {createdon: { $gte: start_date, $lt: end_date} }, 
       {author: req.user._id} 
      ] 

     }; 

sorgusu herhangi döndürmez: o

Benim sorgu altındadır diğer özellikleri" bir demet metin arama ölçütleriyle eşleşen YA yok vE yerine getirmek sonuçta koleksiyonda belgelerin bulunmasına rağmen Kullanıcı tarafından istekte gönderilen kriterler VE yan tümcesi.

Temel olarak, kafamı MongoDB'nin boş bir dizeyle çalışacak $ metin aramasını nasıl alacağımı çiziyorum.

ben sadece bu yüzden gibi sorgu oluşturmadan önce bir şeyler metin biliyorum: i koşullu kontrol akışı içindeki sorgu nesnesi oluşturmak zorunda kalmadan bu istenen işlevselliği sağlayabilirseniz

var query; 
    if (!searchText.length) { 
    //We know there's no search text, so just use the conditions in the AND clause 
    query = { 
     createdon: { $gte: start_date, $lt: end_date}, 
     author: req.user._id 
    }; 

Sadece merak. Gelecekteki okuyucular için

+0

MongoDB, boşlukları tam metnin bir parçası olarak dizine kopyalamıyor – Saleem

+0

@Saleem Dokümanlara baktıktan sonra, $ veya koşulun sözdizimi veya bununla ilgili bir şeyle yanlış bir şey yapıp yapmadığımı merak ediyorum. satırları .. Sorgunun koşullu bildiriminin gitmenin yolu olduğunu söyleyebilir misiniz? –

+0

İkinci yaklaşımınız en iyi yoldur. MongoDB'yi hiçbir şey için çalışmasını engeller :) – Saleem

cevap

1

:

Şimdi bu i sorgunun koşullu beyanı ile gittin işe gitmek için öylesine, bu soruna geçici bir çözüm gibi olamaz ve bu sadece iyi çalışıyor.

//Get the search text from the request  
    var searchText = req.body.searchText || ""; 

    var query = { 
     event_date: { $gte: start_date, $lt: end_date}, 
     author: req.user.id 
    }; 

    //Check if there is any search text before applying the $text query 
    if (searchText.length) { 

    query["$text"] = { $search: searchText } 
    } 

Bu, artık hiçbir şey gönderilmediyse metin aramayı göz ardı ediyor.

Birisi cevap verene kadar bu cevaptır!