Как получить вложенный документ внутри массива MongoDB с помощью C#

#c# #mongodb #linq #mongodb-.net-driver

#c# #mongodb #linq #mongodb-.net-driver

Вопрос:

Это мой json, который содержит несколько свойств, я хочу выполнить фильтрацию, принести только то, что мне нужно. В Dependentsbenefits у меня есть другой список. Мне трудно выполнять эту фильтрацию с LINQ . Я хочу привести только те поля, которые содержат ID параметр метода.

 {
    "_id": "b0164f61-a203-478b-becc-b9a67312981d",
    "personalData": { },
    "address": {},
    "emails": [],
    "syndicate": { },
    "dependents": [],
    "phone": [],
    "bank": [],
    "attributes": {},
    "benefits": [],
    "transport": { },
    "attachments": [],
    "documents": [],
    "Dependentsdocuments": [],
    "Dependentsattachments": [],
    "Dependentsbenefits": [
        {
            "_id": "b0164f61-a203-478b-becc-b9a67312981d",
            "id": "5f9bf75a-5c47-4a55-b17b-9f8bd26f3dee",
            "dependentId": "70b39bed-e3e0-41e3-a5be-076623b9a909",
            "type": {
                "_id": "1",
                "label": "Plano de Saúde",
                "name": "healthPlan",
                "required": false
            }
        },
        {
            "_id": "b0164f61-a203-478b-becc-b9a67312981d",
            "id": "0899c807-10de-4ed2-b69a-abe97fe24aa2",
            "dependentId": "70b39bed-e3e0-41e3-a5be-076623b9a909",
            "type": {
                "_id": "2",
                "label": "Plano Odontológico",
                "name": "dentalPlan",
                "required": false
            }
        },
        {
            "_id": "b0164f61-a203-478b-becc-b9a67312981d",
            "id": "7f7927f1-95aa-4ada-a0d6-08e9231977ec",
            "dependentId": "e8139400-da15-4069-aef6-d566e71b4ca0",
            "type": {
                "_id": "1",
                "label": "Plano de Saúde",
                "name": "healthPlan",
                "required": false
            }
        },
        {
            "_id": "b0164f61-a203-478b-becc-b9a67312981d",
            "id": "337fe700-9c58-4f92-964c-096e8137d05a",
            "dependentId": "e8139400-da15-4069-aef6-d566e71b4ca0",
            "type": {
                "_id": "2",
                "label": "Plano Odontológico",
                "name": "dentalPlan",
                "required": false
            }
        },
        {
            "_id": "b0164f61-a203-478b-becc-b9a67312981d",
            "id": "b817b50c-ab43-4c50-824e-c42e3c5afd18",
            "dependentId": "092d6a20-c138-41ff-9a3d-dc38ce23aa6e",
            "type": {
                "_id": "1",
                "label": "Plano de Saúde",
                "name": "healthPlan",
                "required": false
            }
        },
        {
            "_id": "b0164f61-a203-478b-becc-b9a67312981d",
            "id": "2dd47d24-1acc-4b10-9e3c-5da6a2f0245b",
            "dependentId": "092d6a20-c138-41ff-9a3d-dc38ce23aa6e",
            "type": {
                "_id": "2",
                "label": "Plano Odontológico",
                "name": "dentalPlan",
                "required": false
            }
        }
    ]
}  

В этом методе getDocument . Я передаю два параметра: идентификатор сотрудника и зависимый. Я использую эту операцию и условие linq. DependentsDocuments = n.ElementAt (-1) .DependentsDocuments.Where (x => x.dependentId == dependentId) .ToList ()
То есть в dependentDocument будут сохранены только те, которые содержат идентификатор зависимого

 public async Task<List<Documents>> GetDocument(string ownerId, string dependentId)
        {

            var findDocument = _employee.AsQueryable().Where(dep => dep.ownerId == ownerId).GroupBy(s => new { s.DependentsDocuments })
                .Select(n => new Employee {
                   DependentsDocuments = n.ElementAt(-1).DependentsDocuments.Where(x => x.dependentId == dependentId).ToList()
                });

            return findDocument.ElementAt(-1).DependentsDocuments;
            
            }  

Лучший способ сбора данных? помня, что моя модель в основном такая же, как Json. Следуйте за ними для лучшего объяснения.

 public class EmployeeViewModel
{
    [BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
    public string ownerId { get; set; }
    public string atributeChange { get;  set; }
    public PersonalDataViewModel personalData { get; set; }
    public AddressViewModel address { get; set; }
    public List<EmailsViewModel>  emails { get; set; }
    public SyndicateViewModel syndicate { get; set; }
    public List<DependentsViewModel> dependents { get; set; }
    public List<PhoneViewModel> phone { get; set; }
    public List<BankViewModel> bank { get; set; }
    public AttributesViewModel attributes { get; set; }
    public List<BenefitsViewModel> benefits { get; set; }
    public TransportViewModel transport { get; set; }
    public List<AttachmentsViewModel> attachments { get; set; }
    public List<DocumentsViewModel> documents { get; set; }
    public List<DocumentsImagesViewModel> DependentsDocuments { get; set; }
    public List<AttachmentsViewModel> DependentsAttachments { get; set; }
    public List<BenefitsViewModel> DependentsBenefits { get; set; }
}

public class DocumentsViewModel
{
    [BsonId]
    public string ownerId { get; set; }
    public string id { get; set; }
    public string dependentId { get; set; }
    public string number { get; set; }
    public DateTime expiration { get; set; }
    public List<DocumentsImagesViewModel> images { get; set; }
    public List<DocumentPropertiesViewModel> properties { get; set; }
    public DocumentTypeViewModel type { get; set; }
}