Вы должны будете использовать функцию агрегирования, чтобы иметь возможность вызывать оператор trim .
К сожалению, прямого вызова через драйвер C # не существует, однако вы можете создать его, используя несколько BsonDocuments, например:
var barcode = " 1512356 ";
//This exclude the trimmedField from the result.
var projectionDefinition = Builders<BsonDocument>.Projection.Exclude("trimmedField");
//Call the trim operator and put it in the temporary trimmedField property (this trims the barcode on the database)
var expression = new BsonDocument(new List<BsonElement>
{
new BsonElement("trimmedField", new BsonDocument(new BsonDocument("$trim", new BsonDocument("input", "$Barcodes.PrimaryBarcode"))))
});
//Add the trimmedField to the document
var addFieldsStage = new BsonDocument(new BsonElement("$addFields", expression));
//Build a filter on the trimmedField and trim the local variable
var trimFilter = Builders<BsonDocument>.Filter.Eq(x => x["trimmedField"], barcode.Trim());
//Put it all together
var result = collection.Aggregate().AppendStage<BsonDocument>(addFieldsStage).Match(trimFilter).Project(projectionDefinition).As<YourType>().ToList();
Убедитесь, что в .As<T>
указан правильный тип, чтобы иметь возможность разыграть сущность.
И если вы добавите [BsonIgnoreExtraElements]
над своим классом, вы сможете отказаться от стадии проецирования.