Отображение записей MongoDB, которые не соответствуют схеме или являются пустыми/пустыми

#c# #mongodb #blazor #blazor-server-side

Вопрос:

Я создаю приложение Blazor на основе BlazorSQLandMongoDb

Используя данные примера здесь Введение в MongoDB

Моя .бритва:

    <MudTable Items="structuredDatas" Hover="true" Breakpoint="Breakpoint.Sm">
        <HeaderContent>
            <MudTh>Name</MudTh>
            <MudTh>Qty</MudTh>
            <MudTh>Rating</MudTh>
            <MudTh>Edit</MudTh>
            <MudTh>Delete</MudTh>
        </HeaderContent>
        <RowTemplate>
            <MudTd DataLabel="name">@context.Name</MudTd>
            <MudTd DataLabel="qty">@context.Qty</MudTd>
            <MudTd DataLabel="score">
                @foreach (var rating in context.Ratings)
                {
                    <div>@rating.Score</div>
                }
            </MudTd>
        </RowTemplate>
    </MudTable>
 

Это работает до тех пор, пока каждая запись соответствует схеме (то есть содержит все поля документа) и каждое поле не является пустым или пустым.

  1. Как заставить его возвращать все запрошенные поля записи и игнорировать незапрошенные поля, даже если запись точно не соответствует схеме?
  2. Как заставить его возвращать запись, даже если поле пустое/пустое?

Это будет иметь решающее значение, если мне потребуется пересмотреть или добавить схему позже.

Обновить

Я обновил свой код с [BsonIgnoreExtraElements] помощью декоратора. Это работает, если я удаляю любое поле, кроме рейтингов, которое содержит список. (например "Ratings": [ { "score": 8 }, { "score": 9 } ] )

 [BsonIgnoreExtraElements]
public class StructuredData
{
   public string Id { get; set; }
   public string Name { get; set; }
   public int Qty { get; set; }
   public List<Rating> Ratings { get; set; }
}

public class Rating
{
    public int Score { get; set; }
}
 

Страница загружается, но таблицы нет, если я сниму рейтинг. Все еще не разобрался в этой части.

Ответ №1:

Решена последняя проблема с:

 <MudTd DataLabel="Score">
    @if (context.Ratings != null)
    {
        @foreach (var rating in context.Ratings)
        {
            <div>@rating.Score</div>
        }
    }
</MudTd>
 

Что также может решить первую проблему…