Skip to content

DOCSP-41981: Change streams #113

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

Merged

Conversation

norareidy
Copy link
Collaborator

@norareidy norareidy commented Aug 22, 2024

Pull Request Info

PR Reviewing Guidelines

JIRA - https://jira.mongodb.org/browse/DOCSP-41981
Staging - https://preview-mongodbnorareidy.gatsbyjs.io/php-library/DOCSP-41981-change-streams/read/change-streams/

Self-Review Checklist

  • Is this free of any warnings or errors in the RST?
  • Did you run a spell-check?
  • Did you run a grammar-check?
  • Are all the links working?
  • Are the facets and meta keywords accurate?

Copy link
Collaborator

@rustagir rustagir left a comment

Choose a reason for hiding this comment

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

a few small things!

Comment on lines 28 to 29
When using the {+php-library+}, you can instantiate a ``MongoDB\ChangeStream`` to
monitor data changes.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
When using the {+php-library+}, you can instantiate a ``MongoDB\ChangeStream`` to
monitor data changes.
When using the {+php-library+}, you can create an instance of ``MongoDB\ChangeStream`` to
monitor data changes, such as updates, insertions, and deletions.

When you update the collection, the change stream application prints the change
as it occurs. The printed change event resembles the following output:

.. code-block:: bash
Copy link
Collaborator

Choose a reason for hiding this comment

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

S: change the type to none instead of bash, as this is output not a command. I think console might work too

Comment on lines 107 to 108
The following passes a pipeline that includes the ``$match`` stage to the ``watch()``
method. This instructs the ``watch()`` method to output only update operations:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
The following passes a pipeline that includes the ``$match`` stage to the ``watch()``
method. This instructs the ``watch()`` method to output only update operations:
The following passes a pipeline that includes the ``$match`` stage to the ``watch()``
method. This instructs the ``watch()`` method to output events only when update operations occur:

---------------------------

To modify the behavior of the ``watch()`` method, you can pass an options array
as a parameter to ``watch()``. The following table describes some options you
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
as a parameter to ``watch()``. The following table describes some options you
as a parameter to ``watch()``. The following table describes useful options you

* - ``fullDocument``
- | Specifies whether to show the full document after the change, rather
than showing only the changes made to the document. To learn more about
this option, see :ref:`php-change-stream-pre-post-image`.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
this option, see :ref:`php-change-stream-pre-post-image`.
this option, see the :ref:`php-change-stream-pre-post-image` section of this guide.

| Each change stream event document includes a resume token as the ``_id``
field. Pass the entire ``_id`` field of the change event document that
represents the operation you want to resume after.
| This option is mutually exclusive with ``startAfter`` and ``startAtOperationTime``.
Copy link
Collaborator

Choose a reason for hiding this comment

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

S: since you mention startAtOperationTime, maybe you can include it in this table

With the change stream application running, updating a document in the
``restaurants`` collection by using the :ref:`preceding update example
<php-change-stream-update>` prints a change event resembling the following
code:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
code:
output:

@norareidy norareidy requested a review from rustagir August 27, 2024 18:25
Copy link
Collaborator

@rustagir rustagir left a comment

Choose a reason for hiding this comment

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

lgtm!

@norareidy norareidy requested review from a team and jmikola and removed request for a team August 29, 2024 20:08
// start-open-change-stream
$changeStream = $collection->watch();

foreach ($changeStream as $event) {
Copy link
Member

Choose a reason for hiding this comment

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

foreach loops are not suitable for iterating tailable cursors (such as those returned for change streams), as the loop will terminate as soon as there are no documents to consume. In other words, foreach prevents us from actually polling the cursor and waiting for additional data.

This is why the PHPLIB docs had a Tailable Cursor Iteration tutorial. The existing examples in the watch() API reference demonstrate an equivalent approach, with added code to break out of the loop should we receive an "invalidate" event.

I'm not sure if this script is ever intended to be executed in its entirety, or simply serve as an assortment of snippets to include in the rendered docs. But if you're using the proper approach to iterate the change stream, note that the first loop is unlikely to terminate on its own and that would prevent subsequent statements in the file from executing.

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 changed these loops to for loops and edited based on the examples you linked - let me know what you think

Copy link
Member

Choose a reason for hiding this comment

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

New iteration examples look good. Thanks.

@norareidy norareidy requested a review from jmikola September 3, 2024 19:10
:language: php
:dedent:

When you update the collection, the change stream application prints the change
Copy link
Member

Choose a reason for hiding this comment

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

Something that just occurred to me: should this tutorial advise users to run this PHP code through a shell/terminal? Users would likely run into issues trying to execute the watch() process through a web server.

I'm curious if there's language from other language tutorials (assuming this was adapted from existing content) we can use.

The most straightforward way to address this might be to consistently refer to "shell process" instead of "application or shell" for all of the code examples (no harm in using that for the update example as well).

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

We use "application" pretty consistently across all docs, but I agree that it makes sense to suggest running the application from the shell. I updated all mentions of running the application on this page to clarify that

:language: php
:dedent:

With the change stream application running, updating a document in the
Copy link
Member

Choose a reason for hiding this comment

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

I think "updating" should be "update".

Per my earlier comment about pointing users away from using a web server, the following might be clearer:

With the change stream application running in a separate shell, update a document...

Copy link
Collaborator Author

@norareidy norareidy Sep 5, 2024

Choose a reason for hiding this comment

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

Added "in a separate shell" - "updating" makes more grammatical sense in this case

Copy link
Member

Choose a reason for hiding this comment

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

"updating" makes more grammatical sense in this case

My mistake. I missed that the sentence continued with "prints a change event..." after the :ref: link.

@jmikola jmikola mentioned this pull request Sep 4, 2024
5 tasks
@norareidy norareidy requested a review from jmikola September 5, 2024 15:05
@norareidy norareidy merged commit cd4c81f into mongodb:php-standardization Sep 5, 2024
1 of 2 checks passed
@norareidy norareidy deleted the DOCSP-41981-change-streams branch September 5, 2024 17:33
norareidy added a commit that referenced this pull request Sep 27, 2024
* Add PR template

* Scaffolding

* DOCSP-41953: Create a deployment (#93)

* DOCSP-41953: Create a deployment

* toc

* add troubleshoot file

* DOCSP-41954: Create a connection string (#99)

* DOCSP-41954: Create a connection string

* edits

* spacing

* DOCSP-42388: Next steps (#101)

* DOCSP-41975: Retrieve data (#102)

* DOCSP-41975: Retrieve data

* fixes

* quotes

* code fix

* JS feedback

* JT feedback

* code format

* fix

* JT feedback 2

* edit

* DOCSP-41952: Download and Install (#92)

* DOCSP-41952: Download and Install

* edits

* toc, fixes

* AS feedback

* AS feedback 2

* typo

* JT feedback

* DOCSP-41976: Projection guide (#104)

* DOCSP-41976: Projection guide

* edits

* fixes

* code edits, output

* JS feedback

* JT feedback

* DOCSP-41955: Connect to MongoDB (#100)

* DOCSP-41955: Connect to MongoDB

* edits

* edit

* RR feedback

* typo

* code edit

* DOCSP-41974: Specify a query (#103)

* DOCSP-41974: Specify a query

* edits

* output

* fix

* snooty.toml

* RR feedback

* code edits

* DOCSP-41977: Specify documents to return (#105)

* DOCSP-41977: Specify documents to return

* edits

* code output

* toc

* MM feedback, code edits

* edit

* JT feedback

* edit

* test

* MM feedback 2

* DOCSP-41957 - Mongo Client (#106)

Co-authored-by: Rea Rustagi <85902999+rustagir@users.noreply.github.com>

* DOCSP-41960 - TLS (#114)

* DOCSP-41978: Count documents (#108)

* DOCSP-41978: Count documents

* edits

* code ex format

* link

* RR feedback

* DOCSP-41979: Distinct values (#109)

Adds a Distinct Values guide.

* DOCSP-41981: Change streams (#113)

Adds a Change Streams guide.

* DOCSP-41993 Compatibility Table

* test webhook

* toc and sharedincludes

* lang table

* edits

* headings

* retry on shared include

* shared includes

* callout

* help links

* DOCSP-41958 - Connection Targets (#107)

Co-authored-by: Nora Reidy <nora.reidy@mongodb.com>
Co-authored-by: Andreas Braun <git@alcaeus.org>

* tech review

* DOCSP-41968: Update documents (#118)

* DOCSP-41968: Update documents

* snooty fix

* edits

* DOCSP-41967: Insert documents (#116)

* DOCSP-41967: Insert documents

* build

* snooty

* edit

* JS feedback

* JT feedback

* JT feedback 2

* DOCSP-41980: Cursor guide (#110)

* DOCSP-41980: Cursor guide

* edits

* code edits

* output

* vale fix

* MM feedback

* edit

* fix code ex

* edit

* JT feedback

* DOCSP-41988: Aggregation (#115)

* DOCSP-41988: Aggregation

* toc

* edits

* code edit

* JS feedback

* dev center

* JM feedback

* explain api link

* JM feedback 2

* DOCSP-41983: indexes landing pg

* wip

* wip

* MM PR fixes 1

* JM tech review 1

* JM tech review 1

* wip

* wip

* DOCSP-41969: Replace documents (#125)

* DOCSP-41969: Replace documents

* edits

* wording

* SA

* JT feedback

* JM tech review 2

* Add files via upload

* DOCSP-41970: Delete documents (#128)

Adds a guide that shows how to delete documents.

* DOCSP-41984: single field index

* wip

* JS PR fixes 1

* wip

* DOCSP-41986: multikey indexes

* links

* bullet pts

* JS suggestion

* fix whitespace per JM comment

* uncomment

* DOCSP-41985: compound idx

* small fix

* DOCSP-41966: Write operations landing (#135)

* DOCSP-41966: Write operations landing

* edits

* RR feedback

* JT feedback

* JT feedback 2

* gridfs examples

* DOCSP-42026: In use encryption (#142)

* DOCSP-42026: In use encryption

* edit

* DOCSP-41972: GridFS guide (#133)

* DOCSP-41972: GridFS guide

* fixes

* code edits

* fix

* RR feedback

* phpmethod

* fix

* JM most feedback

* alternate upload/download methods

* file revisions

* code fix

* tojson

* edits

* JM feedback 2

* edits

* JM last feedback

* DOCSP-41971: Bulk write (#130)

* DOCSP-41971: Bulk write

* edits

* JS feedback

* api links

* DOCSP-41987: atlas search idx

* resolve todos

* toc

* DOCSP-41963: Databases and collections (#136)

* DOCSP-41963: Databases and collections

* edits

* phpmethod

* code fix

* MW feedback

* fix

* MW feedback 2

* JM feedback

* JM feedback 2

* JS fix

* internal review

* DOCSP-41982: cluster monitoring

* small fixes

* MW PR fixes 1

* test netlify

* spacing

* try using out of repo ref and add back legend

* ou of repo ref

* legend glitch

* JM tech review 1

* single quotes

* links

* vale

* remove older driver version past 1.15

* DOCSP-41991 What's New

* add rest of versions

* fix links

* fix links

* JM tech review 2

* DOCSP-41964: Time series collections (#138)

* DOCSP-41964: Time series collections

* toc

* edits

* keywords

* SA feedback

* JT feedback

* JM final fixes

* review comments

* typo

* DOCSP-41973 Read Landing Page

* review comments

* vale errors

* small thing

* full page with ex

* add page

* meta

* DOCSP-41965: Read and write settings (#146)

* DOCSP-41965: Read and write settings

* more info

* edits

* edits

* headers

* fix link

* fix

* RR feedback

* api docs

* fix

* fix

* DOCSP-41950: Landing page (#150)

* DOCSP-41950: Landing page

* fix build errors

* fixes, data formats

* toc

* fix

* data formats folder

* RR feedback

* fix

* remove file

* edit sample app intro

* change links in count sections

* update sample app intro

* DOCSP-41990: Authentication mechanisms (#139)

* DOCSP-41990: Authentication mechanisms

* client tabs

* edits

* edits

* add info

* reduce repetition

* add section

* fix link

* MW feedback

* fix

* JM most feedback

* move to code file

* more JM edits

* JM feedback 2

* DOCSP-41989: Security landing page (#149)

* DOCSP-41989: Security landing page

* more info

* edits

* snooty.toml

* edits

* RR feedback

* JM feedback

* DOCSP-41962 - Stable API (#117)

Co-authored-by: Jeremy Mikola <jmikola@gmail.com>

* DOCSP-41992 Upgrade versions

* toc

* edits

* how to upgrade sections

* style

* edit

* edit

* review comments

* ref

* Revise descriptions for server opening/closed events

* DOCSP-43204: Connection landing page (#147)

* DOCSP-43204: Connection landing page

* toc edit

* edits

* remove compression

* fix

* sample app

* snooty

* JM feedback

* replica set

* JM feedback 2

* JM last feedback

* DOCSP-43819: php 1.20 release

* fix

* DOCSP-41956: run a command

* wip

* formatting fix

* JS PR fixes 1

* link fix

* style fixes

* JT tech review 1

* wip

* JM tech review

* tree

* api links

* links

* JM tech review 2

* small fixes

* add ext upgrade command

* DOCSP-41995: transaction

* wip

* update code

* NR PR fixes 1

* wip

* add emphasis

* add with_txn() method to api links

* cxn string env

* edit

* JM tech review 1

* remove dupe sc

* tech review

* wrap fix

* edit copy

* DOCSP-41959 - Connection Options (#112)

Co-authored-by: Nora Reidy <nora.reidy@mongodb.com>
Co-authored-by: Jeremy Mikola <jmikola@gmail.com>

* DOCSP-43396: Cleanup (#151)

* DOCSP-43396: Cleanup

* quickstart fix

* code fixes

* edit

* snooty

* edit

* code output

* build log errors

* another build fix

* add info

* upgrade guide to landing

* fix

* driver mentions

* RR feedback

* build fix

* build fix

* php directives

---------

Co-authored-by: Mike Woofter <108414937+mongoKart@users.noreply.github.com>
Co-authored-by: Rea Rustagi <85902999+rustagir@users.noreply.github.com>
Co-authored-by: Lindsey Moore <lindsey.moore@mongodb.com>
Co-authored-by: Andreas Braun <git@alcaeus.org>
Co-authored-by: rustagir <rea.rustagi@mongodb.com>
Co-authored-by: Brandon Ly <brandonly@lostcoding.com>
Co-authored-by: lindseymoore <71525840+lindseymoore@users.noreply.github.com>
Co-authored-by: Jeremy Mikola <jmikola@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants