public ActionResult <CandidateSearchResponse> Search(CandidateSearchPermsDTO permsDTO) { var result = _repo.SearchCandidate(permsDTO); if (result != null) { return(new CandidateSearchResponse { Data = result, TotalCount = result.Count(), Status = (int)HttpStatusCode.OK, Success = true }); } return(BadRequest()); }
public List <CandidateSearchResult> SearchCandidate(CandidateSearchPermsDTO parms) { //search by Email / name if (!string.IsNullOrWhiteSpace(parms.EmailOrName)) { var nameOrEmailFilter = Builders <Candidate> .Filter.Eq("Name", parms.EmailOrName); nameOrEmailFilter |= Builders <Candidate> .Filter.Eq("FirstName", parms.EmailOrName); nameOrEmailFilter |= Builders <Candidate> .Filter.Eq("LastName", parms.EmailOrName); nameOrEmailFilter |= Builders <Candidate> .Filter.Eq("Email", parms.EmailOrName); var searchByEmailOrName = collection.Find(nameOrEmailFilter).ToList(); var resultsearchByEmailOrName = _mapper.Map <List <Candidate>, List <CandidateSearchResult> >(searchByEmailOrName); return(resultsearchByEmailOrName); } //db.getCollection('Candidates').aggregate([ // {$match: { "Functions": {$in: ["ICT"] } }}, // {$match: { "JobLocations": {$in: ["EASTERN_SWITZERLAND"] } }}, // {$match: { "SelectedCompanies.Sector": {$in: ["MEDIA"] } }} // ]) var ans = collection.Aggregate(); if (parms.Functions != null && parms.Functions.Any()) { var filter = Builders <Candidate> .Filter.In("Functions", parms.Functions); ans = ans.Match(filter); } if (parms.Locations != null && parms.Locations.Any()) { var filter2 = Builders <Candidate> .Filter.In("JobLocations", parms.Locations); ans = ans.Match(filter2); } if (parms.CompanySectors != null && parms.CompanySectors.Any()) { var filter3 = Builders <Candidate> .Filter.In("SelectedCompanies.Sector", parms.CompanySectors); ans = ans.Match(filter3); } if (parms.OrganizationNames != null && parms.OrganizationNames.Any()) { var filter4 = new Dictionary <string, object> { { "SelectedCompanies.Name", new BsonDocument(new Dictionary <string, object> { { "$in", parms.OrganizationNames } }) } }; ans = ans.Match(new BsonDocument(filter4)); } //var a = collection.Aggregate().Match(filter2).Match(filter).Match(filter3).Match(new BsonDocument(filter4)).ToList(); var result = _mapper.Map <List <Candidate>, List <CandidateSearchResult> >(ans.ToList()); return(result); //....................wrong way.................... // db.getCollection('Candidates').aggregate([ // {$unwind: "$Functions"}, // {$match: { "Functions": {$in: ["ICT"] }}}, //{$unwind : "$JobLocations"}, // {$match: { "JobLocations": {$in: ["EASTERN_SWITZERLAND"] } }}, // {$unwind : "$SelectedCompanies"}, // {$match: { "SelectedCompanies.Sector": {$in: ["INFORMATION", "MEDIA"] } }}, // { $group : { _id: "$Email", // Email: { $first: "$Email"}, // Name : { $first: "$Name"}, }}]) //List<CandidateSearchResult> result = new List<CandidateSearchResult>(); //var builder = Builders<BsonDocument>.Filter; //var filt = builder.In("Functions", parms.Functions); //var filt2 = builder.In("JobLocations", parms.Locations); //var filt3 = builder.In("SelectedCompanies.Sector", parms.CmpSector); //var a = collection.Aggregate().Unwind("Functions") // .Match(filt) // .Unwind("JobLocations") // .Match(filt2) // .Unwind("SelectedCompanies") // .Match(filt3) // .Project("{_id:0}") // .Group(new BsonDocument { // { "_id", "$Email" }, { "Email", new BsonDocument("$first", "$Email") }, { "Name", new BsonDocument("$first", "$Name")} // }).ToList(); //result = BsonSerializer.Deserialize<List<CandidateSearchResult>>(a.ToJson()); //return result; }