Как записать индекс массива строк в ravendb - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть документ ravendb, который называется «Заказы», ​​подобные этому.

{
"MyOrders": [
    "S1",
    "S2"
],

"Id": "6666"
}

. Я сделаю запрос к этому документу и передам строку заказа, например, S1 Затем он должен вернуть мне этот документ, так как S1 соответствует ему.Я довольно новичок в этом ravendb.Я не могу найти путь.Я написал только это до сих пор

   public class MyOrderIndexes: AbstractIndexCreationTask<Order>
{

    public MyOrderIndexes()
    {
        Map = Orders => from Order in Orders
                                 select new
                                             {
                                                 ID= Order.Id
                                             };
        Index(x => x.Id, FieldIndexing.NotAnalyzed);
    }
}

Может ли кто-нибудь мне помочь

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Для запроса вам не нужно создавать индекс.Просто сделайте запрос, Raven создаст его для вас.

Этот запрос должен работать просто отлично:

var hasS2 = session.Query<Orders>()
   .Where(o => o.MyOrders.Contains("S2"))
   .ToList();
0 голосов
/ 11 декабря 2018

Одной из проблем является индексирование поля на Id, а также то, что вам необходимо сопоставить MyOrders для выполнения запроса к нему.

Индекс:

public class MyOrderIndexes: AbstractIndexCreationTask<Order>
{    
    public MyOrderIndexes()
    {
        Map = Orders => from Order in Orders
                                 select new
                                 {
                                       Id = Order.Id,
                                       MyOrders = Order.MyOrders
                                 };
    }
}

Запрос:

var results = session
    .Query<Order, MyOrderIndexes>()
    .Where(x => x.MyOrders.Any(l => l == "S1"))
    .ToList();  

Модель:

public class Order
{
    public string Id { get; set; }
    public ICollection<string> MyOrders { get; set; }
}
...