Драйвер MongoDB возвращает ноль при использовании метода Project с вложенным массивом - PullRequest
0 голосов
/ 11 июля 2019

Рассмотрим эту структуру для модели:

public class Entity : Document
    {
        [BsonRepresentation(BsonType.Int32)]
        public int CreateUserId { get; set; }
        [BsonRepresentation(BsonType.Int32)]
        public int ChangeUserId { get; set; }
        [BsonDateTimeOptions(Kind = DateTimeKind.Utc, Representation = BsonType.DateTime)]
        public DateTime ChangeDate { get; set; }
    }

public class TrackedEntity : Entity
    {
        public bool Deleted { get; set; }
    }

public class Shop : TrackedEntity
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public string MobilePhone { get; set; }
        public string PhoneNumber { get; set; }
        public string ShopTelegramToken { get; set; }
        public string ShopAndroidId { get; set; }
        public string TelegramURL { get; set; }
        public string TelegramName { get; set; }
        public List<Category> CategoryList { get; set; } = new List<Category>();
    }

public class Category : TrackedEntity
    {
        [BsonRepresentation(BsonType.String)]
        public string Name { get; set; }
        public string Description { get; set; }
        [BsonRepresentation(BsonType.String)]
        public string ParentCategoryId { get; set; }
        [BsonRepresentation(BsonType.String)]
        public string ShopId { get; set; }

        public List<Product> ProductList { get; set; } = new List<Product>();
    }

public class Product : TrackedEntity
    {
        [BsonRepresentation(BsonType.String)]
        public string Name { get; set; }
        [BsonRepresentation(BsonType.String)]
        public string ProductCategoryId { get; set; }
        public string ImageId { get; set; }
        [BsonRepresentation(BsonType.String)]
        public string ShopId { get; set; }
        public List<Property> PropertyList { get; set; } = new List<Property>();
    }

Когда я пытаюсь получить Продукты определенной категории, возвращается ноль:

public async Task<PagedList<Product>> GetProductsOfCategory(Guid id, Guid shopId, int pageNumber, int pageSize)
        {
            var category = await _context.GetCollection<Shop>("shops").Find(x => x.Id == shopId && x.CategoryList.Any(y => y.Id == id)).Project(c => c.CategoryList.ElementAt(-1)).SingleOrDefaultAsync();
            return await PagedList<Product>.CreateAsync(category.ProductList, pageNumber, pageSize);
        }

Я думаю, что проблема в методе ElementAt вметод Project, потому что без использования это возвращаемое значение не равно нулю.

...