Ответ 1
Томек,
Вы не можете загрузить частичный документ, но вы можете загрузить проекцию.
session.Query<User>()
.Where(x=>x.Name == name)
.Select( x=> new { x.Name, x.Email });
Это загрузит только соответствующие поля
Я играю с Raven DB в течение нескольких дней, и я хотел бы использовать его в качестве хранилища для своего приложения для веб-чата. У меня есть документ, который содержит некоторые пользовательские данные и историю чатов - это большие сообщения чата коллекции.
Каждый раз, когда я загружаю пользовательский журнал чата, также загружается история, даже если мне нужно всего несколько полей, таких как: имя пользователя, пароль и адрес электронной почты.
Мой вопрос: как загрузить только часть документа из базы данных?
Томек,
Вы не можете загрузить частичный документ, но вы можете загрузить проекцию.
session.Query<User>()
.Where(x=>x.Name == name)
.Select( x=> new { x.Name, x.Email });
Это загрузит только соответствующие поля
Из того, что я видел, вы можете сделать это (на основе оригинального сценария "Пользователь" выше):
public class UserSummary
{
public string Name { get; set; }
public string Email { get; set; }
}
Затем вы можете сделать это:
documentSession.Query<User>().AsProjection<UserSummary>();
Глядя на сервер Raven, он выплевывает это как часть запроса:
?query=&pageSize=128&fetch=Name&fetch=Email&fetch=Id
Итак, похоже, что он запрашивает и возвращает только подмножество исходного объекта, что хорошо.
Это также работает:
documentSession.Query<User>().Select( x=> new User { Name = x.Name, Email= x.Email })
Но я не думаю, что это так же чисто, как возврат объекта UserSummary.
Некоторые последующие вопросы тем, кто опубликовал ответы:
Ссылка на RaccoonBlog имеет следующий пример:
Будет ли этот метод предпочтительнее над .AsProjection()? В чем разница между двумя подходами?
Tomek, вы не можете загрузить только часть документа.
Однако я понимаю проблему в вашем случае. Я рекомендую использовать два отдельных документа для каждого пользователя: тот, который фактически содержит данные пользователей (имя, пароль, электронная почта и т.д.) И один, содержащий все сообщения пользователей. Таким образом, по-прежнему очень дешево загружать все сообщения пользователя, а также загружать список пользователей для общих целей.
Это на самом деле очень похоже на то, как можно моделировать блог-домен, где у вас есть сообщение и комментарии к сообщениям. Посмотрите RaccoonBlog, чтобы увидеть, как это работает.