MongoDB текстовый поиск по строковому массиву - PullRequest
1 голос
/ 26 мая 2011

У меня есть следующий класс:

public class Movie
{
    string Name get; set;
    string Director get;  set;
    IList<String> Tags get; set;
}

Как я могу запросить теги?Я хочу запросить как SQL с like %term%.Я пробовал с /term/i, но это не работает.

term = string.Format(@"/{0}/i", term);
var tags = db.GetCollection().Find( 
    new { Tags = term  }, 
    new { Tags = OrderBy.Descending },
    new { Tags = 1}, 8, 0).ToList();

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Правильный запрос:

 var tags = db.GetCollection().Find( 
 new { Tags = Q.Matches(string.Format(@".*{0}.*", term))},
 new { Tags = OrderBy.Descending }, new { Tags = 1}, 8, 0).ToList();
0 голосов
/ 29 августа 2011

Еще лучше, вы можете использовать Regex в провайдере NORM LINQ (ссылка http://schotime.net/blog/index.php/2010/04/29/nosql-norm-mongodb-and-regular-expressions).

_provider.GetCollection<T>().AsQueryable()
  .Where(t =>
    Regex.IsMatch(t.Tags, String.Format(".*{0}.*", term), RegexOptions.IgnoreCase))
 .OrderByDescending();
0 голосов
/ 26 мая 2011
...