Skip to content

Commit b7398eb

Browse files
committed
DOCS-690 snapshot queries faq
1 parent b4227e0 commit b7398eb

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

source/faq/developers.txt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,3 +465,42 @@ driver <>`.
465465
.. code-block:: javascript
466466

467467
db.getCollection("_foo").find()
468+
469+
.. _faq-developers-snapshot-queries:
470+
471+
How do I perform a snapshot query in MongoDB?
472+
---------------------------------------------
473+
474+
MongoDB does not support full point-in-time snapshot where the cursor
475+
returned from a query points to the records at the time of the
476+
query execution, regardless of additional write operations that may
477+
have occurred during the lifetime of the cursor. However, MongoDB does
478+
provides a :method:`snapshot() <cursor.snapshot()>` method to prevent
479+
the case where a cursor could return a document more than once because
480+
an intervening write operation results in a move of the document due to
481+
the growth in document size.
482+
483+
When applied to the cursor returned from :method:`find()`,
484+
:method:`snapshot() <cursor.snapshot()>` assures that the cursor
485+
returns a document no more than once.
486+
487+
.. note::
488+
489+
- Even with :method:`snapshot() <cursor.snapshot()>`, objects
490+
inserted or deleted during the lifetime of the cursor may or may
491+
not be returned.
492+
493+
- The :method:`snapshot() <cursor.snapshot()>` method traverses the
494+
index on the ``_id``. As such, :method:`snapshot()
495+
<cursor.snapshot()>` **cannot** be used with :method:`sort()
496+
<cursor.sort()>` or :method:`hint() <cursor.hint()>`. No other
497+
index can be used for the query.
498+
499+
- Alternatively, instead of :method:`snapshot()
500+
<cursor.snapshot()>`, you can use a *unique* index on field(s)
501+
that will not be modified and use :method:`hint() <cursor.hint()>`
502+
to explicitly force that index during the query in order to
503+
achieve the same :method:`snapshot() <cursor.snapshot()>` mode.
504+
Additionally, to use a non-unique index on field(s) that will not
505+
be modified, you can create a unique index by including the
506+
``_id`` field to the index fields.

0 commit comments

Comments
 (0)