I am trying to convert the following MQL query to the equivalent c# driver syntax but am facing some issues. When executing the MQL directly in Compass Aggregates, the query returns results, however when using the c# driver 0 results are returned.
{
$search: {
compound: {
should: [
{
embeddedDocument: {
operator: {
compound: {
should: [
{
embeddedDocument: {
operator: {
compound: {
should: [
{
text: {
query: "32590",
path: "Roles.Attributes.Value",
},
},
],
},
},
path: "Roles.Attributes",
},
},
],
},
},
path: "Roles",
},
},
{
autocomplete: {
query: "joe",
path: "FirstName",
},
},
{
autocomplete: {
query: "joe",
path: "LastName",
},
},
{
autocomplete: {
query: "joe",
path: "Username",
},
}
],
},
index: "role_searching_idx",
},
},
{
$match: {},
},
{
$facet: {
count: [
{
$count: "count",
},
],
users: [
{
$skip: NumberLong(0),
},
{
$limit: NumberLong(50),
},
],
},
},
]}
c# Attempt:
var countFacet = AggregateFacet.Create("count", PipelineDefinition<User, AggregateCountResult>.Create(new[]
{
PipelineStageDefinitionBuilder.Count<User>()
}));
var usersFacet = AggregateFacet.Create("users", PipelineDefinition<User, User>.Create(new[]
{
PipelineStageDefinitionBuilder.Skip<User>((page - 1) * size),
PipelineStageDefinitionBuilder.Limit<User>(size)
}));
var filter = Builders<User>.Filter.Eq(f => f.Status, status);
var aggregates = collection.Aggregate()
.Search(Builders<User>.Search
.Compound()
.Should(
Builders<User>.Search.EmbeddedDocument(u => u.Roles, rolesQuery),
Builders<User>.Search.Autocomplete(a => a.FirstName, query),
Builders<User>.Search.Autocomplete(a => a.LastName, query),
Builders<User>.Search.Autocomplete(a => a.Username, query),
Builders<User>.Search.Autocomplete(a => a.Profile.Reference, query),
), indexName: "role_searching_idx")
.Match(filter)
.Facet(countFacet, usersFacet)
.ToListAsync();
var count = results.First()
.Facets.First(x => x.Name == "count")
.Output<AggregateCountResult>()?
.FirstOrDefault()?
.Count ?? 0;
var users = results.First()
.Facets.First(f => f.Name == "users")
.Output<User>()?
.ToList();
Any ideas where I am going wrong?