Используя RavenDB v4.2 или выше, я хочу настроить индекс, который запрашивает другую коллекцию. По сути, воспроизводите предложение WHERE IN в отображаемой части индекса.
Представленные ниже модели представляют две коллекции. Здесь каждый User
имеет коллекцию идентификаторов устройств:
class Device {
public string Id { get; set; }
public string Name { get; set; }
}
class User {
public string Id { get; set; }
public string BlogPostId { get; set; }
public List<string> DeviceIds { get; set; }
}
Теперь рассмотрим следующий индекс в качестве примера того, чего я пытаюсь достичь:
public class DeviceIndex : AbstractIndexCreationTask<Device, DeviceIndex.Result>
{
public class Result
{
public string Id { get; set; }
public string DeviceName { get; set; }
public bool HasUser { get; set; }
public int UserCount { get; set; }
}
public DeviceIndex()
{
Map = devices => from d in devices
select new Result
{
Id = d.Id,
DeviceName = d.Name,
HasUser = ... ?, // How to get this from Users collection?
UserCount = ... ? // same...
};
}
Как мне заполнить HasUser
true / false и UserCount
свойства в этом индексе? Например, как я могу запросить здесь коллекцию «Пользователь»?
Обратите внимание, что этот пример серьезно упрощен для краткости. Меня не очень интересуют обходные пути или изменение логики c.