Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DOCSP-43911 - Implicit Client-Side Projection #242

Merged
merged 8 commits into from
Oct 3, 2024
Merged
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions source/whats-new.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,77 @@ The 3.0 driver release includes the following new features:
`TimeOnly Struct. <https://learn.microsoft.com/en-us/dotnet/api/system.timeonly?view=net-6.0>`__
API reference page on MSDN.

- Adds support for implicit client-side projection when using the ``Find()`` method,
the ``Select()`` method, or the ``Project()`` aggregation stage with the LINQ3 provider.
In previous versions of the driver, you could perform client-side
projection with the LINQ3 provider only after calling the ``ToEnumerable()`` or
``AsEnumerable()`` method, and only within the ``Select()`` method.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and only within the Select() method

Why would this be the case? Once you're client-side you can do anything.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suspect I inferred this from something in the Jira ticket.


To learn how to enable and use client-side projection for a driver method, select the
corresponding tab:

.. tabs::

.. tab:: Find() Method
:tabid: find-method

.. code-block:: csharp

// Enable client-side projection
var findOptions = new FindOptions();
findOptions.TranslationOptions = new ExpressionTranslationOptions
{
EnableClientSideProjections = true
};

var find = collection
.Find(doc => doc.Id == 1, findOptions);
.Project(doc => new { R = MyFunction(doc.Name) });

.. tab:: Select() Method
:tabid: select-method

.. code-block:: csharp

// Enable client-side projection
var aggregateOptions = new AggregateOptions();
aggregateOptions.TranslationOptions = new ExpressionTranslationOptions
{
EnableClientSideProjections = true
};

var queryable = collection
.AsQueryable(aggregateOptions)
.Where(doc => doc.Id == 1)
.Select(doc => new { R = MyFunction(doc.Name) });

.. tab:: Project() Method
:tabid: project-method

.. code-block:: csharp

// Enable client-side projection
var aggregateOptions = new AggregateOptions();
aggregateOptions.TranslationOptions = new ExpressionTranslationOptions
{
EnableClientSideProjections = true
};

var aggregate = collection
.Aggregate(aggregateOptions)
.Project(doc => new { R = MyFunction(doc.Name) });

.. tip:: MongoClientSettings

To enable client-side projection for all queries on a client, set the
``TranslationOptions`` property of the ``MongoClientSettings`` object to ``true``.

To learn more about using the aggregation pipeline with the {+driver-short+}, see
:ref:`csharp-aggregation`.

For more information about this release, see the :github:`v3.0 release notes
</mongodb/mongo-csharp-driver/releases/tag/v3.0.0>`.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link will be broken until actual release.


.. _csharp-version-2.28:

What's New in 2.28
Expand Down
Loading