MongoDB.Labs.Search 1.0.0-rc1

This is a prerelease version of MongoDB.Labs.Search.
There is a newer version of this package available.
See the version list below for details.
dotnet add package MongoDB.Labs.Search --version 1.0.0-rc1
NuGet\Install-Package MongoDB.Labs.Search -Version 1.0.0-rc1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MongoDB.Labs.Search" Version="1.0.0-rc1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MongoDB.Labs.Search --version 1.0.0-rc1
#r "nuget: MongoDB.Labs.Search, 1.0.0-rc1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install MongoDB.Labs.Search as a Cake Addin
#addin nuget:?package=MongoDB.Labs.Search&version=1.0.0-rc1&prerelease

// Install MongoDB.Labs.Search as a Cake Tool
#tool nuget:?package=MongoDB.Labs.Search&version=1.0.0-rc1&prerelease

This 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.

Examples

C# Objects

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();

BSON Documents

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();

Autocomplete Operator

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();

Compound Operator

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();

Equals Operator

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();

Exists Operator

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();

Near Operator

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();

Phrase Operator

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();

Query String Operator

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();

Range Operator

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.

Regular Expression Operator

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.

Text Operator

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();

Wildcard Operator

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();
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 is compatible.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.0 166,008 11/6/2022
1.1.0-beta1 14,710 8/13/2022
1.0.1-beta1 901 6/4/2022
1.0.0 58,587 5/27/2022
1.0.0-rc1 3,627 4/10/2022
1.0.0-beta2 943 1/3/2022
1.0.0-beta1 813 8/22/2021