⚠ Deprecated: Legacy
MongoDB driver extension providing support for Atlas Search. This package is NOT a supported MongoDB product. See https://github.com/mongodb-labs/mongo-csharp-search for more details.
$ dotnet add package MongoDB.Labs.SearchThis library is an extension to the MongoDB C# driver providing support for the
$search stage used with Atlas Search. You can gain access to the extension
methods for Atlas search by adding a reference to the library in your project
and using the MongoDB.Labs.Search namespace.
This repository is NOT a supported MongoDB product.
You can get the latest release from the NuGet feed or from the GitHub releases page.
Perform a search for C# objects, specifying field names as expression trees.
public class HistoricalDocument
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("body")]
public string Body { get; set; }
[BsonElement("title")]
public string Title { get; set; }
[BsonElement("highlights")]
public List<Highlight> Highlights { get; set; }
[BsonElement("score")]
public double Score { get; set; }
}
List<HistoricalDocument> results = coll.Aggregate()
.Search(
SearchBuilders<HistoricalDocument>.Search
.Phrase("life, liberty, and the pursuit of happiness", x => x.Body, 5),
SearchBuilders<HistoricalDocument>.Highlight
.Options(x => x.Body))
.Limit(10)
.Project<HistoricalDocument>(
Builders<HistoricalDocument>.Projection
.Include(x => x.Title)
.Include(x => x.Body)
.MetaSearchHighlights("highlights")
.MetaSearchScore("score"))
.ToList();
Perform a search for raw BSON documents, specifying field names as strings.
List<BsonDocument> results = coll.Aggregate()
.Search(
SearchBuilders<BsonDocument>.Search
.Phrase("life, liberty, and the pursuit of happiness", "body", 5),
SearchBuilders<BsonDocument>.Highlight
.Options("body"))
.Limit(10)
.Project<BsonDocument>(
Builders<BsonDocument>.Projection
.Include("title")
.Include("body")
.MetaSearchHighlights("highlights")
.MetaSearchScore("score"))
.ToList();
Search for instances of HistoricalDocument in which the Body field matches the autocomplete
query life, liber.
List<HistoricalDocument> results = coll.Aggregate()
.Search(
SearchBuilders<HistoricalDocument>.Search
.Autocomplete("life, liber", x => x.Body, AutocompleteTokenOrder.Sequential))
.ToList();
Search for instances of HistoricalDocument in which the Body field contains the text life
and liberty but not property.
List<HistoricalDocument> results = coll.Aggregate()
.Search(
SearchBuilders<HistoricalDocument>.Search
.Compound()
.Must(
SearchBuilders<HistoricalDocument>.Search
.Text("life", x => x.Body),
SearchBuilders<HistoricalDocument>.Search
.Text("liberty", x => x.Body))
.MustNot(
SearchBuilders<HistoricalDocument>.Search
.Text("property", x => x.Body)))
.ToList();
Search for instances of Person in which the Retired field is set to true.
List<Person> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.Eq(x => x.Retired, true))
.ToList();
Search for instances of Person in which the MiddleName field exists.
List<Person> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.Exists(x => x.MiddleName))
.ToList();
Search for instances of Person similar to the specified instance.
List<Person> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.MoreLikeThis(
new Person
{
FirstName = "John",
LastName = "Doe"
}))
.ToList();
Search for instances of Person in which the Age field is near 18 with a pivot of 1.
List<Person> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.Near(x => x.Age, 18, 1))
.ToList();
Search for instances of HistoricalDocument in which the Body field contains the phrase
life, liberty, and the pursuit of happiness.
List<HistoricalDocument> results = coll.Aggregate()
.Search(
SearchBuilders<HistoricalDocument>.Search
.Phrase("life, liberty, and the pursuit of happiness", x => x.Body))
.ToList();
Search for instances of Person matching the query string firstName:john lastName:doe using
the FirstName field as the default when no field is specified in the query string.
List<Person> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.QueryString(x => x.FirstName, "firstName:john lastName:doe"))
.ToList();
Search for instances of Person in which the Age field is greater than or equal to 18 and less
than 21.
List<Person> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.RangeInt32(x => x.Age).Gte(18).Lt(21))
.ToList();
The search operator functions RangeInt64, RangeDouble, and RangeDateTime are also available
to perform range searches for their respective data types. Every range search must include a lower
bound using Gt (greater than) or Gte (greater than or equal to) and an upper bound using Lt
(less than) or Lte (less than or equal to). The order of the bounds does not matter.
Search for instances of Person in which the FirstName field matches the regular expression
joh?n.
List<Person> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.Regex("joh?n", x => x.FirstName))
.ToList();
Regular expressions must be specified using the Lucene syntax.
Search for instances of HistoricalDocument in which the Body field contains the text
life, liberty, and the pursuit of happiness.
List<HistoricalDocument> results = coll.Aggregate()
.Search(
SearchBuilders<Person>.Search
.Text(x => x.Body, "life, liberty, and the pursuit of happiness"))
.ToList();
Search for instances of HistoricalDocument in which the Body field matches the wildcard string
happ*.
List<HistoricalDocument> results = coll.Aggregate()
.Search(
SearchBuilders<HistoricalDocument>.Search
.Wildcard("happ*", x => x.Body))
.ToList();