PYTHON-2682 Add support for the comment field to all helpers (#847)
This commit is contained in:
parent
b7057ecf9f
commit
ddb6614442
@ -39,6 +39,7 @@ class _AggregationCommand(object):
|
||||
let=None,
|
||||
user_fields=None,
|
||||
result_processor=None,
|
||||
comment=None,
|
||||
):
|
||||
if "explain" in options:
|
||||
raise ConfigurationError(
|
||||
@ -57,6 +58,8 @@ class _AggregationCommand(object):
|
||||
if let:
|
||||
common.validate_is_mapping("let", let)
|
||||
options["let"] = let
|
||||
if comment is not None:
|
||||
options["comment"] = comment
|
||||
self._options = options
|
||||
|
||||
# This is the batchSize that will be used for setting the initial
|
||||
|
||||
@ -138,13 +138,14 @@ def _raise_bulk_write_error(full_result):
|
||||
class _Bulk(object):
|
||||
"""The private guts of the bulk write API."""
|
||||
|
||||
def __init__(self, collection, ordered, bypass_document_validation):
|
||||
def __init__(self, collection, ordered, bypass_document_validation, comment=None):
|
||||
"""Initialize a _Bulk instance."""
|
||||
self.collection = collection.with_options(
|
||||
codec_options=collection.codec_options._replace(
|
||||
unicode_decode_error_handler="replace", document_class=dict
|
||||
)
|
||||
)
|
||||
self.comment = comment
|
||||
self.ordered = ordered
|
||||
self.ops = []
|
||||
self.executed = False
|
||||
@ -308,6 +309,8 @@ class _Bulk(object):
|
||||
write_concern = final_write_concern or write_concern
|
||||
|
||||
cmd = SON([(cmd_name, self.collection.name), ("ordered", self.ordered)])
|
||||
if self.comment:
|
||||
cmd["comment"] = self.comment
|
||||
if not write_concern.is_server_default:
|
||||
cmd["writeConcern"] = write_concern.document
|
||||
if self.bypass_doc_val:
|
||||
|
||||
@ -95,6 +95,7 @@ class ChangeStream(Generic[_DocumentType]):
|
||||
start_at_operation_time: Optional[Timestamp],
|
||||
session: Optional["ClientSession"],
|
||||
start_after: Optional[Mapping[str, Any]],
|
||||
comment: Optional[Any] = None,
|
||||
) -> None:
|
||||
if pipeline is None:
|
||||
pipeline = []
|
||||
@ -125,7 +126,7 @@ class ChangeStream(Generic[_DocumentType]):
|
||||
self._collation = collation
|
||||
self._start_at_operation_time = start_at_operation_time
|
||||
self._session = session
|
||||
|
||||
self._comment = comment
|
||||
# Initialize cursor.
|
||||
self._cursor = self._create_cursor()
|
||||
|
||||
@ -209,8 +210,8 @@ class ChangeStream(Generic[_DocumentType]):
|
||||
self._command_options(),
|
||||
explicit_session,
|
||||
result_processor=self._process_result,
|
||||
comment=self._comment,
|
||||
)
|
||||
|
||||
return self._client._retryable_read(
|
||||
cmd.get_cursor, self._target._read_preference_for(session), session
|
||||
)
|
||||
|
||||
@ -423,6 +423,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
ordered: bool = True,
|
||||
bypass_document_validation: bool = False,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> BulkWriteResult:
|
||||
"""Send a batch of write operations to the server.
|
||||
|
||||
@ -472,6 +473,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
``False``.
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
An instance of :class:`~pymongo.results.BulkWriteResult`.
|
||||
@ -481,6 +484,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
.. note:: `bypass_document_validation` requires server version
|
||||
**>= 3.2**
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
|
||||
@ -491,7 +497,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
"""
|
||||
common.validate_list("requests", requests)
|
||||
|
||||
blk = _Bulk(self, ordered, bypass_document_validation)
|
||||
blk = _Bulk(self, ordered, bypass_document_validation, comment=comment)
|
||||
for request in requests:
|
||||
try:
|
||||
request._add_to_bulk(blk)
|
||||
@ -504,11 +510,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
return BulkWriteResult(bulk_api_result, True)
|
||||
return BulkWriteResult({}, False)
|
||||
|
||||
def _insert_one(self, doc, ordered, write_concern, op_id, bypass_doc_val, session):
|
||||
def _insert_one(
|
||||
self, doc, ordered, write_concern, op_id, bypass_doc_val, session, comment=None
|
||||
):
|
||||
"""Internal helper for inserting a single document."""
|
||||
write_concern = write_concern or self.write_concern
|
||||
acknowledged = write_concern.acknowledged
|
||||
command = SON([("insert", self.name), ("ordered", ordered), ("documents", [doc])])
|
||||
if comment is not None:
|
||||
command["comment"] = comment
|
||||
if not write_concern.is_server_default:
|
||||
command["writeConcern"] = write_concern.document
|
||||
|
||||
@ -538,6 +548,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
document: _DocumentIn,
|
||||
bypass_document_validation: bool = False,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> InsertOneResult:
|
||||
"""Insert a single document.
|
||||
|
||||
@ -558,6 +569,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
``False``.
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
- An instance of :class:`~pymongo.results.InsertOneResult`.
|
||||
@ -567,6 +580,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
.. note:: `bypass_document_validation` requires server version
|
||||
**>= 3.2**
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
|
||||
@ -588,6 +604,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
op_id=None,
|
||||
bypass_doc_val=bypass_document_validation,
|
||||
session=session,
|
||||
comment=comment,
|
||||
),
|
||||
write_concern.acknowledged,
|
||||
)
|
||||
@ -598,6 +615,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
ordered: bool = True,
|
||||
bypass_document_validation: bool = False,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> InsertManyResult:
|
||||
"""Insert an iterable of documents.
|
||||
|
||||
@ -621,6 +639,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
``False``.
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
An instance of :class:`~pymongo.results.InsertManyResult`.
|
||||
@ -630,6 +650,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
.. note:: `bypass_document_validation` requires server version
|
||||
**>= 3.2**
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
|
||||
@ -657,7 +680,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
yield (message._INSERT, document)
|
||||
|
||||
write_concern = self._write_concern_for(session)
|
||||
blk = _Bulk(self, ordered, bypass_document_validation)
|
||||
blk = _Bulk(self, ordered, bypass_document_validation, comment=comment)
|
||||
blk.ops = [doc for doc in gen()]
|
||||
blk.execute(write_concern, session=session)
|
||||
return InsertManyResult(inserted_ids, write_concern.acknowledged)
|
||||
@ -679,6 +702,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
session=None,
|
||||
retryable_write=False,
|
||||
let=None,
|
||||
comment=None,
|
||||
):
|
||||
"""Internal update / replace helper."""
|
||||
common.validate_boolean("upsert", upsert)
|
||||
@ -704,7 +728,6 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
if not isinstance(hint, str):
|
||||
hint = helpers._index_document(hint)
|
||||
update_doc["hint"] = hint
|
||||
|
||||
command = SON([("update", self.name), ("ordered", ordered), ("updates", [update_doc])])
|
||||
if let:
|
||||
common.validate_is_mapping("let", let)
|
||||
@ -712,6 +735,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
if not write_concern.is_server_default:
|
||||
command["writeConcern"] = write_concern.document
|
||||
|
||||
if comment is not None:
|
||||
command["comment"] = comment
|
||||
# Update command.
|
||||
if bypass_doc_val:
|
||||
command["bypassDocumentValidation"] = True
|
||||
@ -757,6 +782,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint=None,
|
||||
session=None,
|
||||
let=None,
|
||||
comment=None,
|
||||
):
|
||||
"""Internal update / replace helper."""
|
||||
|
||||
@ -777,6 +803,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
session=session,
|
||||
retryable_write=retryable_write,
|
||||
let=let,
|
||||
comment=comment,
|
||||
)
|
||||
|
||||
return self.__database.client._retryable_write(
|
||||
@ -793,6 +820,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> UpdateResult:
|
||||
"""Replace a single document matching the filter.
|
||||
|
||||
@ -845,12 +873,14 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
:Returns:
|
||||
- An instance of :class:`~pymongo.results.UpdateResult`.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``let`` parameter.
|
||||
Added ``comment`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added ``hint`` parameter.
|
||||
.. versionchanged:: 3.6
|
||||
@ -878,6 +908,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint=hint,
|
||||
session=session,
|
||||
let=let,
|
||||
comment=comment,
|
||||
),
|
||||
write_concern.acknowledged,
|
||||
)
|
||||
@ -893,6 +924,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> UpdateResult:
|
||||
"""Update a single document matching the filter.
|
||||
|
||||
@ -938,12 +970,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
- An instance of :class:`~pymongo.results.UpdateResult`.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``let`` parameter.
|
||||
Added ``comment`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added ``hint`` parameter.
|
||||
.. versionchanged:: 3.9
|
||||
@ -974,6 +1009,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint=hint,
|
||||
session=session,
|
||||
let=let,
|
||||
comment=comment,
|
||||
),
|
||||
write_concern.acknowledged,
|
||||
)
|
||||
@ -989,6 +1025,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> UpdateResult:
|
||||
"""Update one or more documents that match the filter.
|
||||
|
||||
@ -1034,12 +1071,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
- An instance of :class:`~pymongo.results.UpdateResult`.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``let`` parameter.
|
||||
Added ``comment`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added ``hint`` parameter.
|
||||
.. versionchanged:: 3.9
|
||||
@ -1071,22 +1111,32 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint=hint,
|
||||
session=session,
|
||||
let=let,
|
||||
comment=comment,
|
||||
),
|
||||
write_concern.acknowledged,
|
||||
)
|
||||
|
||||
def drop(self, session: Optional["ClientSession"] = None) -> None:
|
||||
def drop(
|
||||
self,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> None:
|
||||
"""Alias for :meth:`~pymongo.database.Database.drop_collection`.
|
||||
|
||||
:Parameters:
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
The following two calls are equivalent:
|
||||
|
||||
>>> db.foo.drop()
|
||||
>>> db.drop_collection("foo")
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.7
|
||||
:meth:`drop` now respects this :class:`Collection`'s :attr:`write_concern`.
|
||||
|
||||
@ -1100,7 +1150,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
self.write_concern,
|
||||
self.read_concern,
|
||||
)
|
||||
dbo.drop_collection(self.__name, session=session)
|
||||
dbo.drop_collection(self.__name, session=session, comment=comment)
|
||||
|
||||
def _delete(
|
||||
self,
|
||||
@ -1115,6 +1165,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
session=None,
|
||||
retryable_write=False,
|
||||
let=None,
|
||||
comment=None,
|
||||
):
|
||||
"""Internal delete helper."""
|
||||
common.validate_is_mapping("filter", criteria)
|
||||
@ -1143,6 +1194,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
common.validate_is_document_type("let", let)
|
||||
command["let"] = let
|
||||
|
||||
if comment is not None:
|
||||
command["comment"] = comment
|
||||
|
||||
# Delete command.
|
||||
result = sock_info.command(
|
||||
self.__database.name,
|
||||
@ -1167,6 +1221,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint=None,
|
||||
session=None,
|
||||
let=None,
|
||||
comment=None,
|
||||
):
|
||||
"""Internal delete helper."""
|
||||
|
||||
@ -1183,6 +1238,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
session=session,
|
||||
retryable_write=retryable_write,
|
||||
let=let,
|
||||
comment=comment,
|
||||
)
|
||||
|
||||
return self.__database.client._retryable_write(
|
||||
@ -1196,6 +1252,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> DeleteResult:
|
||||
"""Delete a single document matching the filter.
|
||||
|
||||
@ -1223,12 +1280,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
- An instance of :class:`~pymongo.results.DeleteResult`.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``let`` parameter.
|
||||
Added ``comment`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added ``hint`` parameter.
|
||||
.. versionchanged:: 3.6
|
||||
@ -1247,6 +1307,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint=hint,
|
||||
session=session,
|
||||
let=let,
|
||||
comment=comment,
|
||||
),
|
||||
write_concern.acknowledged,
|
||||
)
|
||||
@ -1258,6 +1319,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> DeleteResult:
|
||||
"""Delete one or more documents matching the filter.
|
||||
|
||||
@ -1285,12 +1347,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
- An instance of :class:`~pymongo.results.DeleteResult`.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``let`` parameter.
|
||||
Added ``comment`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added ``hint`` parameter.
|
||||
.. versionchanged:: 3.6
|
||||
@ -1309,6 +1374,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint=hint,
|
||||
session=session,
|
||||
let=let,
|
||||
comment=comment,
|
||||
),
|
||||
write_concern.acknowledged,
|
||||
)
|
||||
@ -1339,10 +1405,10 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
are the same as the arguments to :meth:`find`.
|
||||
|
||||
>>> collection.find_one(max_time_ms=100)
|
||||
|
||||
"""
|
||||
if filter is not None and not isinstance(filter, abc.Mapping):
|
||||
filter = {"_id": filter}
|
||||
|
||||
cursor = self.find(filter, *args, **kwargs)
|
||||
for result in cursor.limit(-1):
|
||||
return result
|
||||
@ -1566,7 +1632,6 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
# OP_MSG is required to support encryption.
|
||||
if self.__database.client._encrypter:
|
||||
raise InvalidOperation("find_raw_batches does not support auto encryption")
|
||||
|
||||
return RawBatchCursor(self, *args, **kwargs)
|
||||
|
||||
def _count_cmd(self, session, sock_info, read_preference, cmd, collation):
|
||||
@ -1605,7 +1670,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
batch = result["cursor"]["firstBatch"]
|
||||
return batch[0] if batch else None
|
||||
|
||||
def estimated_document_count(self, **kwargs: Any) -> int:
|
||||
def estimated_document_count(self, comment: Optional[Any] = None, **kwargs: Any) -> int:
|
||||
"""Get an estimate of the number of documents in this collection using
|
||||
collection metadata.
|
||||
|
||||
@ -1619,12 +1684,17 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
operation to run, in milliseconds.
|
||||
|
||||
:Parameters:
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): See list of options above.
|
||||
|
||||
|
||||
.. versionadded:: 3.7
|
||||
"""
|
||||
if "session" in kwargs:
|
||||
raise ConfigurationError("estimated_document_count does not support sessions")
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
|
||||
def _cmd(session, server, sock_info, read_preference):
|
||||
if sock_info.max_wire_version >= 12:
|
||||
@ -1650,7 +1720,11 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
return self.__database.client._retryable_read(_cmd, self.read_preference, None)
|
||||
|
||||
def count_documents(
|
||||
self, filter: Mapping[str, Any], session: Optional["ClientSession"] = None, **kwargs: Any
|
||||
self,
|
||||
filter: Mapping[str, Any],
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> int:
|
||||
"""Count the number of documents in this collection.
|
||||
|
||||
@ -1696,8 +1770,11 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
documents.
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): See list of options above.
|
||||
|
||||
|
||||
.. versionadded:: 3.7
|
||||
|
||||
.. _$expr: https://docs.mongodb.com/manual/reference/operator/query/expr/
|
||||
@ -1710,6 +1787,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
pipeline.append({"$skip": kwargs.pop("skip")})
|
||||
if "limit" in kwargs:
|
||||
pipeline.append({"$limit": kwargs.pop("limit")})
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
pipeline.append({"$group": {"_id": 1, "n": {"$sum": 1}}})
|
||||
cmd = SON([("aggregate", self.__name), ("pipeline", pipeline), ("cursor", {})])
|
||||
if "hint" in kwargs and not isinstance(kwargs["hint"], str):
|
||||
@ -1731,6 +1810,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
self,
|
||||
indexes: Sequence[IndexModel],
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> List[str]:
|
||||
"""Create one or more indexes on this collection.
|
||||
@ -1747,9 +1827,14 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
instances.
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): optional arguments to the createIndexes
|
||||
command (like maxTimeMS) can be passed as keyword arguments.
|
||||
|
||||
|
||||
|
||||
|
||||
.. note:: The :attr:`~pymongo.collection.Collection.write_concern` of
|
||||
this collection is automatically applied to this operation.
|
||||
|
||||
@ -1765,6 +1850,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
.. _createIndexes: https://docs.mongodb.com/manual/reference/command/createIndexes/
|
||||
"""
|
||||
common.validate_list("indexes", indexes)
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
return self.__create_indexes(indexes, session, **kwargs)
|
||||
|
||||
def __create_indexes(self, indexes, session, **kwargs):
|
||||
@ -1811,7 +1898,11 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
return names
|
||||
|
||||
def create_index(
|
||||
self, keys: _IndexKeyHint, session: Optional["ClientSession"] = None, **kwargs: Any
|
||||
self,
|
||||
keys: _IndexKeyHint,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> str:
|
||||
"""Creates an index on this collection.
|
||||
|
||||
@ -1886,10 +1977,14 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
pairs specifying the index to create
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
arguments
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): any additional index creation
|
||||
options (see the above list) should be passed as keyword
|
||||
arguments
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added the ``hidden`` option.
|
||||
.. versionchanged:: 3.6
|
||||
@ -1912,10 +2007,17 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
cmd_options = {}
|
||||
if "maxTimeMS" in kwargs:
|
||||
cmd_options["maxTimeMS"] = kwargs.pop("maxTimeMS")
|
||||
if comment is not None:
|
||||
cmd_options["comment"] = comment
|
||||
index = IndexModel(keys, **kwargs)
|
||||
return self.__create_indexes([index], session, **cmd_options)[0]
|
||||
|
||||
def drop_indexes(self, session: Optional["ClientSession"] = None, **kwargs: Any) -> None:
|
||||
def drop_indexes(
|
||||
self,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> None:
|
||||
"""Drops all indexes on this collection.
|
||||
|
||||
Can be used on non-existant collections or collections with no indexes.
|
||||
@ -1924,9 +2026,14 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
:Parameters:
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
arguments
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): optional arguments to the createIndexes
|
||||
command (like maxTimeMS) can be passed as keyword arguments.
|
||||
|
||||
|
||||
|
||||
.. note:: The :attr:`~pymongo.collection.Collection.write_concern` of
|
||||
this collection is automatically applied to this operation.
|
||||
|
||||
@ -1939,10 +2046,16 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
when connected to MongoDB >= 3.4.
|
||||
|
||||
"""
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
self.drop_index("*", session=session, **kwargs)
|
||||
|
||||
def drop_index(
|
||||
self, index_or_name: _IndexKeyHint, session: Optional["ClientSession"] = None, **kwargs: Any
|
||||
self,
|
||||
index_or_name: _IndexKeyHint,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> None:
|
||||
"""Drops the specified index on this collection.
|
||||
|
||||
@ -1964,12 +2077,17 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
- `index_or_name`: index (or name of index) to drop
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): optional arguments to the createIndexes
|
||||
command (like maxTimeMS) can be passed as keyword arguments.
|
||||
|
||||
|
||||
|
||||
.. note:: The :attr:`~pymongo.collection.Collection.write_concern` of
|
||||
this collection is automatically applied to this operation.
|
||||
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter. Added support for arbitrary keyword
|
||||
arguments.
|
||||
@ -1988,6 +2106,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
|
||||
cmd = SON([("dropIndexes", self.__name), ("index", name)])
|
||||
cmd.update(kwargs)
|
||||
if comment is not None:
|
||||
cmd["comment"] = comment
|
||||
with self._socket_for_writes(session) as sock_info:
|
||||
self._command(
|
||||
sock_info,
|
||||
@ -1999,7 +2119,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
)
|
||||
|
||||
def list_indexes(
|
||||
self, session: Optional["ClientSession"] = None
|
||||
self,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> CommandCursor[MutableMapping[str, Any]]:
|
||||
"""Get a cursor over the index documents for this collection.
|
||||
|
||||
@ -2011,10 +2133,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
:Parameters:
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
An instance of :class:`~pymongo.command_cursor.CommandCursor`.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
|
||||
@ -2028,6 +2155,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
|
||||
def _cmd(session, server, sock_info, read_preference):
|
||||
cmd = SON([("listIndexes", self.__name), ("cursor", {})])
|
||||
if comment is not None:
|
||||
cmd["comment"] = comment
|
||||
|
||||
with self.__database.client._tmp_session(session, False) as s:
|
||||
try:
|
||||
cursor = self._command(
|
||||
@ -2048,7 +2178,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
return self.__database.client._retryable_read(_cmd, read_pref, session)
|
||||
|
||||
def index_information(
|
||||
self, session: Optional["ClientSession"] = None
|
||||
self,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> MutableMapping[str, Any]:
|
||||
"""Get information on this collection's indexes.
|
||||
|
||||
@ -2071,11 +2203,16 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
:Parameters:
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
"""
|
||||
cursor = self.list_indexes(session=session)
|
||||
cursor = self.list_indexes(session=session, comment=comment)
|
||||
info = {}
|
||||
for index in cursor:
|
||||
index["key"] = list(index["key"].items())
|
||||
@ -2083,7 +2220,11 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
info[index.pop("name")] = index
|
||||
return info
|
||||
|
||||
def options(self, session: Optional["ClientSession"] = None) -> MutableMapping[str, Any]:
|
||||
def options(
|
||||
self,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> MutableMapping[str, Any]:
|
||||
"""Get the options set on this collection.
|
||||
|
||||
Returns a dictionary of options and their values - see
|
||||
@ -2094,6 +2235,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
:Parameters:
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
@ -2105,7 +2248,9 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
self.write_concern,
|
||||
self.read_concern,
|
||||
)
|
||||
cursor = dbo.list_collections(session=session, filter={"name": self.__name})
|
||||
cursor = dbo.list_collections(
|
||||
session=session, filter={"name": self.__name}, comment=comment
|
||||
)
|
||||
|
||||
result = None
|
||||
for doc in cursor:
|
||||
@ -2130,8 +2275,11 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
session,
|
||||
explicit_session,
|
||||
let=None,
|
||||
comment=None,
|
||||
**kwargs,
|
||||
):
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
cmd = aggregation_command(
|
||||
self,
|
||||
cursor_class,
|
||||
@ -2154,6 +2302,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
pipeline: _Pipeline,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> CommandCursor[_DocumentType]:
|
||||
"""Perform an aggregation using the aggregation framework on this
|
||||
@ -2196,12 +2345,16 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. ``"$$var"``). This option is
|
||||
only supported on MongoDB >= 5.0.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
|
||||
:Returns:
|
||||
A :class:`~pymongo.command_cursor.CommandCursor` over the result
|
||||
set.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
Added ``let`` parameter.
|
||||
Support $merge and $out executing on secondaries according to the
|
||||
collection's :attr:`read_preference`.
|
||||
@ -2228,6 +2381,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
.. _aggregate command:
|
||||
https://docs.mongodb.com/manual/reference/command/aggregate
|
||||
"""
|
||||
|
||||
with self.__database.client._tmp_session(session, close=False) as s:
|
||||
return self._aggregate(
|
||||
_CollectionAggregationCommand,
|
||||
@ -2236,11 +2390,16 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
session=s,
|
||||
explicit_session=session is not None,
|
||||
let=let,
|
||||
comment=comment,
|
||||
**kwargs,
|
||||
)
|
||||
|
||||
def aggregate_raw_batches(
|
||||
self, pipeline: _Pipeline, session: Optional["ClientSession"] = None, **kwargs: Any
|
||||
self,
|
||||
pipeline: _Pipeline,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> RawBatchCursor[_DocumentType]:
|
||||
"""Perform an aggregation and retrieve batches of raw BSON.
|
||||
|
||||
@ -2268,7 +2427,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
# OP_MSG is required to support encryption.
|
||||
if self.__database.client._encrypter:
|
||||
raise InvalidOperation("aggregate_raw_batches does not support auto encryption")
|
||||
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
with self.__database.client._tmp_session(session, close=False) as s:
|
||||
return self._aggregate(
|
||||
_CollectionRawAggregationCommand,
|
||||
@ -2290,6 +2450,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
start_at_operation_time: Optional[Timestamp] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
start_after: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> CollectionChangeStream[_DocumentType]:
|
||||
"""Watch changes on this collection.
|
||||
|
||||
@ -2368,10 +2529,16 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
- `start_after` (optional): The same as `resume_after` except that
|
||||
`start_after` can resume notifications after an invalidate event.
|
||||
This option and `resume_after` are mutually exclusive.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
A :class:`~pymongo.change_stream.CollectionChangeStream` cursor.
|
||||
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.9
|
||||
Added the ``start_after`` parameter.
|
||||
|
||||
@ -2396,10 +2563,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
start_at_operation_time,
|
||||
session,
|
||||
start_after,
|
||||
comment=comment,
|
||||
)
|
||||
|
||||
def rename(
|
||||
self, new_name: str, session: Optional["ClientSession"] = None, **kwargs: Any
|
||||
self,
|
||||
new_name: str,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> MutableMapping[str, Any]:
|
||||
"""Rename this collection.
|
||||
|
||||
@ -2413,6 +2585,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
- `new_name`: new name for this collection
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): additional arguments to the rename command
|
||||
may be passed as keyword arguments to this helper method
|
||||
(i.e. ``dropTarget=True``)
|
||||
@ -2441,6 +2615,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
new_name = "%s.%s" % (self.__database.name, new_name)
|
||||
cmd = SON([("renameCollection", self.__full_name), ("to", new_name)])
|
||||
cmd.update(kwargs)
|
||||
if comment is not None:
|
||||
cmd["comment"] = comment
|
||||
write_concern = self._write_concern_for_cmd(cmd, session)
|
||||
|
||||
with self._socket_for_writes(session) as sock_info:
|
||||
@ -2459,6 +2635,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
key: str,
|
||||
filter: Optional[Mapping[str, Any]] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> List:
|
||||
"""Get a list of distinct values for `key` among all documents
|
||||
@ -2485,6 +2662,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
from which to retrieve the distinct values.
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): See list of options above.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
@ -2503,6 +2682,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
kwargs["query"] = filter
|
||||
collation = validate_collation_or_none(kwargs.pop("collation", None))
|
||||
cmd.update(kwargs)
|
||||
if comment is not None:
|
||||
cmd["comment"] = comment
|
||||
|
||||
def _cmd(session, server, sock_info, read_preference):
|
||||
return self._command(
|
||||
@ -2611,6 +2792,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> _DocumentType:
|
||||
"""Finds a single document and deletes it, returning the document.
|
||||
@ -2656,13 +2838,15 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
on MongoDB 4.4 and above.
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `**kwargs` (optional): additional command arguments can be passed
|
||||
as keyword arguments (for example maxTimeMS can be used with
|
||||
recent server versions).
|
||||
- `let` (optional): Map of parameter names and values. Values must be
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): additional command arguments can be passed
|
||||
as keyword arguments (for example maxTimeMS can be used with
|
||||
recent server versions).
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``let`` parameter.
|
||||
@ -2684,6 +2868,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
.. versionadded:: 3.0
|
||||
"""
|
||||
kwargs["remove"] = True
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
return self.__find_and_modify(
|
||||
filter, projection, sort, let=let, hint=hint, session=session, **kwargs
|
||||
)
|
||||
@ -2699,6 +2885,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> _DocumentType:
|
||||
"""Finds a single document and replaces it, returning either the
|
||||
@ -2754,11 +2941,13 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): additional command arguments can be passed
|
||||
as keyword arguments (for example maxTimeMS can be used with
|
||||
recent server versions).
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
|
||||
Added ``let`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added the ``hint`` option.
|
||||
@ -2779,6 +2968,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
"""
|
||||
common.validate_ok_for_replace(replacement)
|
||||
kwargs["update"] = replacement
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
return self.__find_and_modify(
|
||||
filter,
|
||||
projection,
|
||||
@ -2803,6 +2994,7 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
hint: Optional[_IndexKeyHint] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
let: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> _DocumentType:
|
||||
"""Finds a single document and updates it, returning either the
|
||||
@ -2897,12 +3089,12 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
constant or closed expressions that do not reference document
|
||||
fields. Parameters can then be accessed as variables in an
|
||||
aggregate expression context (e.g. "$$var").
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): additional command arguments can be passed
|
||||
as keyword arguments (for example maxTimeMS can be used with
|
||||
recent server versions).
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``let`` parameter.
|
||||
.. versionchanged:: 3.11
|
||||
Added the ``hint`` option.
|
||||
.. versionchanged:: 3.9
|
||||
@ -2925,6 +3117,8 @@ class Collection(common.BaseObject, Generic[_DocumentType]):
|
||||
common.validate_ok_for_update(update)
|
||||
common.validate_list_or_none("array_filters", array_filters)
|
||||
kwargs["update"] = update
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
return self.__find_and_modify(
|
||||
filter,
|
||||
projection,
|
||||
|
||||
@ -183,7 +183,7 @@ class Cursor(Generic[_DocumentType]):
|
||||
return_key: Optional[bool] = None,
|
||||
show_record_id: Optional[bool] = None,
|
||||
snapshot: Optional[bool] = None,
|
||||
comment: Any = None,
|
||||
comment: Optional[Any] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
allow_disk_use: Optional[bool] = None,
|
||||
let: Optional[bool] = None,
|
||||
|
||||
@ -471,6 +471,7 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
start_at_operation_time: Optional[Timestamp] = None,
|
||||
session: Optional["ClientSession"] = None,
|
||||
start_after: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> DatabaseChangeStream[_DocumentType]:
|
||||
"""Watch changes on this database.
|
||||
|
||||
@ -542,10 +543,15 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
- `start_after` (optional): The same as `resume_after` except that
|
||||
`start_after` can resume notifications after an invalidate event.
|
||||
This option and `resume_after` are mutually exclusive.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
A :class:`~pymongo.change_stream.DatabaseChangeStream` cursor.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.9
|
||||
Added the ``start_after`` parameter.
|
||||
|
||||
@ -567,6 +573,7 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
start_at_operation_time,
|
||||
session,
|
||||
start_after,
|
||||
comment=comment,
|
||||
)
|
||||
|
||||
def _command(
|
||||
@ -611,6 +618,7 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
read_preference: Optional[_ServerMode] = None,
|
||||
codec_options: Optional[CodecOptions] = DEFAULT_CODEC_OPTIONS,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> Dict[str, Any]:
|
||||
"""Issue a MongoDB command.
|
||||
@ -665,9 +673,12 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
instance.
|
||||
- `session` (optional): A
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): additional keyword arguments will
|
||||
be added to the command document before it is sent
|
||||
|
||||
|
||||
.. note:: :meth:`command` does **not** obey this Database's
|
||||
:attr:`read_preference` or :attr:`codec_options`. You must use the
|
||||
`read_preference` and `codec_options` parameters instead.
|
||||
@ -695,6 +706,9 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
|
||||
.. seealso:: The MongoDB documentation on `commands <https://dochub.mongodb.org/core/commands>`_.
|
||||
"""
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
|
||||
if read_preference is None:
|
||||
read_preference = (session and session._txn_read_preference()) or ReadPreference.PRIMARY
|
||||
with self.__client._socket_for_reads(read_preference, session) as (
|
||||
@ -767,6 +781,7 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
self,
|
||||
session: Optional["ClientSession"] = None,
|
||||
filter: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> CommandCursor[Dict[str, Any]]:
|
||||
"""Get a cursor over the collections of this database.
|
||||
@ -776,12 +791,15 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `filter` (optional): A query document to filter the list of
|
||||
collections returned from the listCollections command.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): Optional parameters of the
|
||||
`listCollections command
|
||||
<https://docs.mongodb.com/manual/reference/command/listCollections/>`_
|
||||
can be passed as keyword arguments to this method. The supported
|
||||
options differ by server version.
|
||||
|
||||
|
||||
:Returns:
|
||||
An instance of :class:`~pymongo.command_cursor.CommandCursor`.
|
||||
|
||||
@ -790,6 +808,8 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
if filter is not None:
|
||||
kwargs["filter"] = filter
|
||||
read_pref = (session and session._txn_read_preference()) or ReadPreference.PRIMARY
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
|
||||
def _cmd(session, server, sock_info, read_preference):
|
||||
return self._list_collections(
|
||||
@ -802,6 +822,7 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
self,
|
||||
session: Optional["ClientSession"] = None,
|
||||
filter: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> List[str]:
|
||||
"""Get a list of all the collection names in this database.
|
||||
@ -816,19 +837,25 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `filter` (optional): A query document to filter the list of
|
||||
collections returned from the listCollections command.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): Optional parameters of the
|
||||
`listCollections command
|
||||
<https://docs.mongodb.com/manual/reference/command/listCollections/>`_
|
||||
can be passed as keyword arguments to this method. The supported
|
||||
options differ by server version.
|
||||
|
||||
|
||||
.. versionchanged:: 3.8
|
||||
Added the ``filter`` and ``**kwargs`` parameters.
|
||||
|
||||
.. versionadded:: 3.6
|
||||
"""
|
||||
if comment is not None:
|
||||
kwargs["comment"] = comment
|
||||
if filter is None:
|
||||
kwargs["nameOnly"] = True
|
||||
|
||||
else:
|
||||
# The enumerate collections spec states that "drivers MUST NOT set
|
||||
# nameOnly if a filter specifies any keys other than name."
|
||||
@ -840,7 +867,10 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
return [result["name"] for result in self.list_collections(session=session, **kwargs)]
|
||||
|
||||
def drop_collection(
|
||||
self, name_or_collection: Union[str, Collection], session: Optional["ClientSession"] = None
|
||||
self,
|
||||
name_or_collection: Union[str, Collection],
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> Dict[str, Any]:
|
||||
"""Drop a collection.
|
||||
|
||||
@ -849,10 +879,16 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
collection object itself
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
|
||||
.. note:: The :attr:`~pymongo.database.Database.write_concern` of
|
||||
this database is automatically applied to this operation.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
|
||||
@ -868,11 +904,14 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
if not isinstance(name, str):
|
||||
raise TypeError("name_or_collection must be an instance of str")
|
||||
|
||||
command = SON([("drop", name)])
|
||||
if comment is not None:
|
||||
command["comment"] = comment
|
||||
|
||||
with self.__client._socket_for_writes(session) as sock_info:
|
||||
return self._command(
|
||||
sock_info,
|
||||
"drop",
|
||||
value=name,
|
||||
command,
|
||||
allowable_errors=["ns not found", 26],
|
||||
write_concern=self._write_concern_for(session),
|
||||
parse_write_concern_error=True,
|
||||
@ -886,6 +925,7 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
full: bool = False,
|
||||
session: Optional["ClientSession"] = None,
|
||||
background: Optional[bool] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> Dict[str, Any]:
|
||||
"""Validate a collection.
|
||||
|
||||
@ -907,6 +947,11 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `background` (optional): A boolean flag that determines whether
|
||||
the command runs in the background. Requires MongoDB 4.4+.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.11
|
||||
Added ``background`` parameter.
|
||||
@ -922,8 +967,10 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
|
||||
if not isinstance(name, str):
|
||||
raise TypeError("name_or_collection must be an instance of str or " "Collection")
|
||||
|
||||
cmd = SON([("validate", name), ("scandata", scandata), ("full", full)])
|
||||
if comment is not None:
|
||||
cmd["comment"] = comment
|
||||
|
||||
if background is not None:
|
||||
cmd["background"] = background
|
||||
|
||||
@ -970,7 +1017,11 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
)
|
||||
|
||||
def dereference(
|
||||
self, dbref: DBRef, session: Optional["ClientSession"] = None, **kwargs: Any
|
||||
self,
|
||||
dbref: DBRef,
|
||||
session: Optional["ClientSession"] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> Optional[_DocumentType]:
|
||||
"""Dereference a :class:`~bson.dbref.DBRef`, getting the
|
||||
document it points to.
|
||||
@ -985,10 +1036,15 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
- `dbref`: the reference
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): any additional keyword arguments
|
||||
are the same as the arguments to
|
||||
:meth:`~pymongo.collection.Collection.find`.
|
||||
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
"""
|
||||
@ -999,4 +1055,6 @@ class Database(common.BaseObject, Generic[_DocumentType]):
|
||||
"trying to dereference a DBRef that points to "
|
||||
"another database (%r not %r)" % (dbref.database, self.__name)
|
||||
)
|
||||
return self[dbref.collection].find_one({"_id": dbref.id}, session=session, **kwargs)
|
||||
return self[dbref.collection].find_one(
|
||||
{"_id": dbref.id}, session=session, comment=comment, **kwargs
|
||||
)
|
||||
|
||||
@ -846,6 +846,7 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
start_at_operation_time: Optional[Timestamp] = None,
|
||||
session: Optional[client_session.ClientSession] = None,
|
||||
start_after: Optional[Mapping[str, Any]] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> ChangeStream[_DocumentType]:
|
||||
"""Watch changes on this cluster.
|
||||
|
||||
@ -917,10 +918,15 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
- `start_after` (optional): The same as `resume_after` except that
|
||||
`start_after` can resume notifications after an invalidate event.
|
||||
This option and `resume_after` are mutually exclusive.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
:Returns:
|
||||
A :class:`~pymongo.change_stream.ClusterChangeStream` cursor.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.9
|
||||
Added the ``start_after`` parameter.
|
||||
|
||||
@ -942,6 +948,7 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
start_at_operation_time,
|
||||
session,
|
||||
start_after,
|
||||
comment=comment,
|
||||
)
|
||||
|
||||
@property
|
||||
@ -1709,19 +1716,25 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
)
|
||||
|
||||
def list_databases(
|
||||
self, session: Optional[client_session.ClientSession] = None, **kwargs: Any
|
||||
self,
|
||||
session: Optional[client_session.ClientSession] = None,
|
||||
comment: Optional[Any] = None,
|
||||
**kwargs: Any,
|
||||
) -> CommandCursor[Dict[str, Any]]:
|
||||
"""Get a cursor over the databases of the connected server.
|
||||
|
||||
:Parameters:
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
- `**kwargs` (optional): Optional parameters of the
|
||||
`listDatabases command
|
||||
<https://docs.mongodb.com/manual/reference/command/listDatabases/>`_
|
||||
can be passed as keyword arguments to this method. The supported
|
||||
options differ by server version.
|
||||
|
||||
|
||||
:Returns:
|
||||
An instance of :class:`~pymongo.command_cursor.CommandCursor`.
|
||||
|
||||
@ -1729,6 +1742,8 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
"""
|
||||
cmd = SON([("listDatabases", 1)])
|
||||
cmd.update(kwargs)
|
||||
if comment is not None:
|
||||
cmd["comment"] = comment
|
||||
admin = self._database_default_options("admin")
|
||||
res = admin._retryable_read_command(cmd, session=session)
|
||||
# listDatabases doesn't return a cursor (yet). Fake one.
|
||||
@ -1740,22 +1755,30 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
return CommandCursor(admin["$cmd"], cursor, None)
|
||||
|
||||
def list_database_names(
|
||||
self, session: Optional[client_session.ClientSession] = None
|
||||
self,
|
||||
session: Optional[client_session.ClientSession] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> List[str]:
|
||||
"""Get a list of the names of all databases on the connected server.
|
||||
|
||||
:Parameters:
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionadded:: 3.6
|
||||
"""
|
||||
return [doc["name"] for doc in self.list_databases(session, nameOnly=True)]
|
||||
return [doc["name"] for doc in self.list_databases(session, nameOnly=True, comment=comment)]
|
||||
|
||||
def drop_database(
|
||||
self,
|
||||
name_or_database: Union[str, database.Database],
|
||||
session: Optional[client_session.ClientSession] = None,
|
||||
comment: Optional[Any] = None,
|
||||
) -> None:
|
||||
"""Drop a database.
|
||||
|
||||
@ -1769,6 +1792,11 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
database to drop
|
||||
- `session` (optional): a
|
||||
:class:`~pymongo.client_session.ClientSession`.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Added ``session`` parameter.
|
||||
@ -1791,7 +1819,7 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
with self._socket_for_writes(session) as sock_info:
|
||||
self[name]._command(
|
||||
sock_info,
|
||||
"dropDatabase",
|
||||
{"dropDatabase": 1, "comment": comment},
|
||||
read_preference=ReadPreference.PRIMARY,
|
||||
write_concern=self._write_concern_for(session),
|
||||
parse_write_concern_error=True,
|
||||
@ -1837,6 +1865,11 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]):
|
||||
:class:`~pymongo.read_concern.ReadConcern`. If ``None`` (the
|
||||
default) the :attr:`read_concern` of this :class:`MongoClient` is
|
||||
used.
|
||||
- `comment` (optional): A user-provided comment to attach to this
|
||||
command.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
Added ``comment`` parameter.
|
||||
|
||||
.. versionchanged:: 3.8
|
||||
Undeprecated. Added the ``default``, ``codec_options``,
|
||||
|
||||
@ -1,10 +1,21 @@
|
||||
{
|
||||
"description": "change-streams",
|
||||
"schemaVersion": "1.0",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"topologies": [
|
||||
"replicaset",
|
||||
"sharded-replicaset"
|
||||
]
|
||||
}
|
||||
],
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0"
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -34,10 +45,7 @@
|
||||
"description": "Test array truncation",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.7",
|
||||
"topologies": [
|
||||
"replicaset"
|
||||
]
|
||||
"minServerVersion": "4.7"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
@ -111,6 +119,134 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Test with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "createChangeStream",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"pipeline": [],
|
||||
"comment": {
|
||||
"name": "test1"
|
||||
}
|
||||
},
|
||||
"saveResultAsEntity": "changeStream0"
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "collection0",
|
||||
"pipeline": [
|
||||
{
|
||||
"$changeStream": {}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"name": "test1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Test with document comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6.0",
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "createChangeStream",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"pipeline": [],
|
||||
"comment": {
|
||||
"name": "test1"
|
||||
}
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "collection0",
|
||||
"pipeline": [
|
||||
{
|
||||
"$changeStream": {}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"name": "test1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Test with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6.0"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "createChangeStream",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"pipeline": [],
|
||||
"comment": "comment"
|
||||
},
|
||||
"saveResultAsEntity": "changeStream0"
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "collection0",
|
||||
"pipeline": [
|
||||
{
|
||||
"$changeStream": {}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -161,6 +161,286 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "aggregate with a string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6.0"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "aggregate",
|
||||
"arguments": {
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
},
|
||||
"object": "collection0"
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "coll0",
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "aggregate with a document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "aggregate",
|
||||
"arguments": {
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"content": "test"
|
||||
}
|
||||
},
|
||||
"object": "collection0"
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "coll0",
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"content": "test"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "aggregate with a document comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6.0",
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "aggregate",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"content": "test"
|
||||
}
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "coll0",
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"content": "test"
|
||||
}
|
||||
},
|
||||
"commandName": "aggregate",
|
||||
"databaseName": "aggregate-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "aggregate with comment does not set comment on getMore",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6.0"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "aggregate",
|
||||
"arguments": {
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"batchSize": 2,
|
||||
"comment": "comment"
|
||||
},
|
||||
"object": "collection0",
|
||||
"expectResult": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"x": 33
|
||||
},
|
||||
{
|
||||
"_id": 4,
|
||||
"x": 44
|
||||
},
|
||||
{
|
||||
"_id": 5,
|
||||
"x": 55
|
||||
},
|
||||
{
|
||||
"_id": 6,
|
||||
"x": 66
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"aggregate": "coll0",
|
||||
"pipeline": [
|
||||
{
|
||||
"$match": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"cursor": {
|
||||
"batchSize": 2
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"commandName": "aggregate",
|
||||
"databaseName": "aggregate-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"getMore": {
|
||||
"$$type": [
|
||||
"int",
|
||||
"long"
|
||||
]
|
||||
},
|
||||
"collection": "coll0",
|
||||
"batchSize": 2,
|
||||
"comment": {
|
||||
"$$exists": false
|
||||
}
|
||||
},
|
||||
"commandName": "getMore",
|
||||
"databaseName": "aggregate-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"getMore": {
|
||||
"$$type": [
|
||||
"int",
|
||||
"long"
|
||||
]
|
||||
},
|
||||
"collection": "coll0",
|
||||
"batchSize": 2,
|
||||
"comment": {
|
||||
"$$exists": false
|
||||
}
|
||||
},
|
||||
"commandName": "getMore",
|
||||
"databaseName": "aggregate-tests"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
494
test/crud/unified/bulkWrite-comment.json
Normal file
494
test/crud/unified/bulkWrite-comment.json
Normal file
@ -0,0 +1,494 @@
|
||||
{
|
||||
"description": "bulkWrite-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-v2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "BulkWrite_comment"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "BulkWrite_comment",
|
||||
"databaseName": "crud-v2",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"x": 33
|
||||
},
|
||||
{
|
||||
"_id": 4,
|
||||
"x": 44
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "BulkWrite with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"object": "collection0",
|
||||
"name": "bulkWrite",
|
||||
"arguments": {
|
||||
"requests": [
|
||||
{
|
||||
"insertOne": {
|
||||
"document": {
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"replaceOne": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"_id": 1,
|
||||
"x": "replaced"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"updateOne": {
|
||||
"filter": {
|
||||
"_id": 2
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": "updated"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"deleteOne": {
|
||||
"filter": {
|
||||
"_id": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": {
|
||||
"deletedCount": 1,
|
||||
"insertedCount": 1,
|
||||
"insertedIds": {
|
||||
"$$unsetOrMatches": {
|
||||
"0": 5
|
||||
}
|
||||
},
|
||||
"matchedCount": 2,
|
||||
"modifiedCount": 2,
|
||||
"upsertedCount": 0,
|
||||
"upsertedIds": {}
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "BulkWrite_comment",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "BulkWrite_comment",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"_id": 1,
|
||||
"x": "replaced"
|
||||
}
|
||||
},
|
||||
{
|
||||
"q": {
|
||||
"_id": 2
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": "updated"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "BulkWrite_comment",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 3
|
||||
},
|
||||
"limit": 1
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "BulkWrite_comment",
|
||||
"databaseName": "crud-v2",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": "replaced"
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": "updated"
|
||||
},
|
||||
{
|
||||
"_id": 4,
|
||||
"x": 44
|
||||
},
|
||||
{
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "BulkWrite with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"object": "collection0",
|
||||
"name": "bulkWrite",
|
||||
"arguments": {
|
||||
"requests": [
|
||||
{
|
||||
"insertOne": {
|
||||
"document": {
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"replaceOne": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"_id": 1,
|
||||
"x": "replaced"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"updateOne": {
|
||||
"filter": {
|
||||
"_id": 2
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": "updated"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"deleteOne": {
|
||||
"filter": {
|
||||
"_id": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"deletedCount": 1,
|
||||
"insertedCount": 1,
|
||||
"insertedIds": {
|
||||
"$$unsetOrMatches": {
|
||||
"0": 5
|
||||
}
|
||||
},
|
||||
"matchedCount": 2,
|
||||
"modifiedCount": 2,
|
||||
"upsertedCount": 0,
|
||||
"upsertedIds": {}
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "BulkWrite_comment",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "BulkWrite_comment",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"_id": 1,
|
||||
"x": "replaced"
|
||||
}
|
||||
},
|
||||
{
|
||||
"q": {
|
||||
"_id": 2
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": "updated"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "BulkWrite_comment",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 3
|
||||
},
|
||||
"limit": 1
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "BulkWrite_comment",
|
||||
"databaseName": "crud-v2",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": "replaced"
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": "updated"
|
||||
},
|
||||
{
|
||||
"_id": 4,
|
||||
"x": 44
|
||||
},
|
||||
{
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "BulkWrite with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"object": "collection0",
|
||||
"name": "bulkWrite",
|
||||
"arguments": {
|
||||
"requests": [
|
||||
{
|
||||
"insertOne": {
|
||||
"document": {
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"replaceOne": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"_id": 1,
|
||||
"x": "replaced"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"updateOne": {
|
||||
"filter": {
|
||||
"_id": 2
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": "updated"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"deleteOne": {
|
||||
"filter": {
|
||||
"_id": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "BulkWrite_comment",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 5,
|
||||
"x": "inserted"
|
||||
}
|
||||
],
|
||||
"ordered": true,
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "BulkWrite_comment",
|
||||
"databaseName": "crud-v2",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"x": 33
|
||||
},
|
||||
{
|
||||
"_id": 4,
|
||||
"x": 44
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
244
test/crud/unified/deleteMany-comment.json
Normal file
244
test/crud/unified/deleteMany-comment.json
Normal file
@ -0,0 +1,244 @@
|
||||
{
|
||||
"description": "deleteMany-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"name": "name2"
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"name": "name3"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "deleteMany with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "deleteMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": {
|
||||
"deletedCount": 2
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "coll0",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"limit": 0
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "deleteMany with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "deleteMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"deletedCount": 2
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "coll0",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"limit": 0
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "deleteMany with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "deleteMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "coll0",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"limit": 0
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"name": "name2"
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"name": "name3"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
242
test/crud/unified/deleteOne-comment.json
Normal file
242
test/crud/unified/deleteOne-comment.json
Normal file
@ -0,0 +1,242 @@
|
||||
{
|
||||
"description": "deleteOne-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"name": "name"
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"name": "name"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "deleteOne with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "deleteOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": {
|
||||
"deletedCount": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "coll0",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"limit": 1
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"name": "name"
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"name": "name"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "deleteOne with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "deleteOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"deletedCount": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "coll0",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"limit": 1
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"name": "name"
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"name": "name"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "deleteOne with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "deleteOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"delete": "coll0",
|
||||
"deletes": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"limit": 1
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"name": "name"
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"name": "name"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
298
test/crud/unified/find-comment.json
Normal file
298
test/crud/unified/find-comment.json
Normal file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"description": "find-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"x": 33
|
||||
},
|
||||
{
|
||||
"_id": 4,
|
||||
"x": 44
|
||||
},
|
||||
{
|
||||
"_id": 5,
|
||||
"x": 55
|
||||
},
|
||||
{
|
||||
"_id": 6,
|
||||
"x": 66
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "find with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "coll0",
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "find with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectResult": [
|
||||
{
|
||||
"_id": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "coll0",
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "find with document comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99",
|
||||
"minServerVersion": "3.6"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "coll0",
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "find with comment does not set comment on getMore",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "3.6"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "find",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"batchSize": 2,
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
{
|
||||
"_id": 3,
|
||||
"x": 33
|
||||
},
|
||||
{
|
||||
"_id": 4,
|
||||
"x": 44
|
||||
},
|
||||
{
|
||||
"_id": 5,
|
||||
"x": 55
|
||||
},
|
||||
{
|
||||
"_id": 6,
|
||||
"x": 66
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"find": "coll0",
|
||||
"filter": {
|
||||
"_id": {
|
||||
"$gt": 1
|
||||
}
|
||||
},
|
||||
"batchSize": 2,
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"getMore": {
|
||||
"$$type": [
|
||||
"int",
|
||||
"long"
|
||||
]
|
||||
},
|
||||
"collection": "coll0",
|
||||
"batchSize": 2,
|
||||
"comment": {
|
||||
"$$exists": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"getMore": {
|
||||
"$$type": [
|
||||
"int",
|
||||
"long"
|
||||
]
|
||||
},
|
||||
"collection": "coll0",
|
||||
"batchSize": 2,
|
||||
"comment": {
|
||||
"$$exists": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
211
test/crud/unified/findOneAndDelete-comment.json
Normal file
211
test/crud/unified/findOneAndDelete-comment.json
Normal file
@ -0,0 +1,211 @@
|
||||
{
|
||||
"description": "findOneAndDelete-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "findOneAndDelete with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndDelete",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"remove": true,
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "findOneAndDelete with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndDelete",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"remove": true,
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "findOneAndDelete with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.2.0",
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndDelete",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"remove": true,
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
234
test/crud/unified/findOneAndReplace-comment.json
Normal file
234
test/crud/unified/findOneAndReplace-comment.json
Normal file
@ -0,0 +1,234 @@
|
||||
{
|
||||
"description": "findOneAndReplace-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "findOneAndReplace with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndReplace",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"x": 5
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"x": 5
|
||||
},
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 5
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "findOneAndReplace with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndReplace",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"x": 5
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"x": 5
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 5
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "findOneAndReplace with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.2.0",
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndReplace",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"x": 5
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"x": 5
|
||||
},
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
228
test/crud/unified/findOneAndUpdate-comment.json
Normal file
228
test/crud/unified/findOneAndUpdate-comment.json
Normal file
@ -0,0 +1,228 @@
|
||||
{
|
||||
"description": "findOneAndUpdate-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "findOneAndUpdate with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndUpdate",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": [
|
||||
{
|
||||
"$set": {
|
||||
"x": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": [
|
||||
{
|
||||
"$set": {
|
||||
"x": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "findOneAndUpdate with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndUpdate",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": [
|
||||
{
|
||||
"$set": {
|
||||
"x": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
},
|
||||
"expectResult": {
|
||||
"_id": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": [
|
||||
{
|
||||
"$set": {
|
||||
"x": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "findOneAndUpdate with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.2.0",
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "findOneAndUpdate",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": [
|
||||
{
|
||||
"$set": {
|
||||
"x": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"findAndModify": "coll0",
|
||||
"query": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": [
|
||||
{
|
||||
"$set": {
|
||||
"x": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1
|
||||
},
|
||||
{
|
||||
"_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
225
test/crud/unified/insertMany-comment.json
Normal file
225
test/crud/unified/insertMany-comment.json
Normal file
@ -0,0 +1,225 @@
|
||||
{
|
||||
"description": "insertMany-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "insertMany with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "coll0",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "insertMany with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "coll0",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "insertMany with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "coll0",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
219
test/crud/unified/insertOne-comment.json
Normal file
219
test/crud/unified/insertOne-comment.json
Normal file
@ -0,0 +1,219 @@
|
||||
{
|
||||
"description": "insertOne-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "insertOne with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"document": {
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "coll0",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "insertOne with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"document": {
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "coll0",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
},
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "insertOne with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "insertOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"document": {
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"insert": "coll0",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 2,
|
||||
"x": 22
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
229
test/crud/unified/replaceOne-comment.json
Normal file
229
test/crud/unified/replaceOne-comment.json
Normal file
@ -0,0 +1,229 @@
|
||||
{
|
||||
"description": "replaceOne-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "ReplaceOne with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "replaceOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"x": 22
|
||||
},
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"x": 22
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "ReplaceOne with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "replaceOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"x": 22
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"x": 22
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "ReplaceOne with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "replaceOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"replacement": {
|
||||
"x": 22
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"x": 22
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
244
test/crud/unified/updateMany-comment.json
Normal file
244
test/crud/unified/updateMany-comment.json
Normal file
@ -0,0 +1,244 @@
|
||||
{
|
||||
"description": "updateMany-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "UpdateMany with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "updateMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"multi": true
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "UpdateMany with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "updateMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"multi": true
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "UpdateMany with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "updateMany",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"multi": true
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
241
test/crud/unified/updateOne-comment.json
Normal file
241
test/crud/unified/updateOne-comment.json
Normal file
@ -0,0 +1,241 @@
|
||||
{
|
||||
"description": "updateOne-comment",
|
||||
"schemaVersion": "1.0",
|
||||
"createEntities": [
|
||||
{
|
||||
"client": {
|
||||
"id": "client0",
|
||||
"observeEvents": [
|
||||
"commandStartedEvent"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"database": {
|
||||
"id": "database0",
|
||||
"client": "client0",
|
||||
"databaseName": "crud-tests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"collection": {
|
||||
"id": "collection0",
|
||||
"database": "database0",
|
||||
"collectionName": "coll0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"initialData": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"description": "UpdateOne with string comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "updateOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "UpdateOne with document comment",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"minServerVersion": "4.4"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "updateOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 22
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "UpdateOne with comment - pre 4.4",
|
||||
"runOnRequirements": [
|
||||
{
|
||||
"maxServerVersion": "4.2.99"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"name": "updateOne",
|
||||
"object": "collection0",
|
||||
"arguments": {
|
||||
"filter": {
|
||||
"_id": 1
|
||||
},
|
||||
"update": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
},
|
||||
"comment": "comment"
|
||||
},
|
||||
"expectError": {
|
||||
"isClientError": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectEvents": [
|
||||
{
|
||||
"client": "client0",
|
||||
"events": [
|
||||
{
|
||||
"commandStartedEvent": {
|
||||
"command": {
|
||||
"update": "coll0",
|
||||
"updates": [
|
||||
{
|
||||
"q": {
|
||||
"_id": 1
|
||||
},
|
||||
"u": {
|
||||
"$set": {
|
||||
"x": 22
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": "comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outcome": [
|
||||
{
|
||||
"collectionName": "coll0",
|
||||
"databaseName": "crud-tests",
|
||||
"documents": [
|
||||
{
|
||||
"_id": 1,
|
||||
"x": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
183
test/test_comment.py
Normal file
183
test/test_comment.py
Normal file
@ -0,0 +1,183 @@
|
||||
# Copyright 2022-present MongoDB, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
"""Test the keyword argument 'comment' in various helpers."""
|
||||
|
||||
import inspect
|
||||
import sys
|
||||
from collections import defaultdict
|
||||
from typing import Any, Union
|
||||
|
||||
sys.path[0:0] = [""]
|
||||
|
||||
from test import IntegrationTest, SkipTest, client_context, unittest
|
||||
from test.utils import EventListener, rs_or_single_client
|
||||
|
||||
from bson.dbref import DBRef
|
||||
from pymongo.collection import Collection
|
||||
from pymongo.command_cursor import CommandCursor
|
||||
from pymongo.database import Database
|
||||
from pymongo.mongo_client import MongoClient
|
||||
from pymongo.operations import IndexModel
|
||||
from pymongo.read_concern import ReadConcern
|
||||
from pymongo.read_preferences import ReadPreference
|
||||
from pymongo.write_concern import WriteConcern
|
||||
|
||||
|
||||
class Empty(object):
|
||||
def __getattr__(self, item):
|
||||
try:
|
||||
self.__dict__[item]
|
||||
except KeyError:
|
||||
return self.empty
|
||||
|
||||
def empty(self, *args, **kwargs):
|
||||
return Empty()
|
||||
|
||||
|
||||
class TestComment(IntegrationTest):
|
||||
def _test_ops(self, helpers, already_supported, listener, db=Empty(), coll=Empty()):
|
||||
results = listener.results
|
||||
for h, args in helpers:
|
||||
c = "testing comment with " + h.__name__
|
||||
with self.subTest("collection-" + h.__name__ + "-comment"):
|
||||
for cc in [c, {"key": c}, ["any", 1]]:
|
||||
results.clear()
|
||||
kwargs = {"comment": cc}
|
||||
if h == coll.rename:
|
||||
tmp = db.get_collection("temp_temp_temp").drop()
|
||||
destruct_coll = db.get_collection("test_temp")
|
||||
destruct_coll.insert_one({})
|
||||
maybe_cursor = destruct_coll.rename(*args, **kwargs)
|
||||
destruct_coll.drop()
|
||||
elif h == db.validate_collection:
|
||||
coll = db.get_collection("test")
|
||||
coll.insert_one({})
|
||||
maybe_cursor = db.validate_collection(*args, **kwargs)
|
||||
else:
|
||||
coll.create_index("a")
|
||||
maybe_cursor = h(*args, **kwargs)
|
||||
self.assertIn(
|
||||
"comment",
|
||||
inspect.signature(h).parameters,
|
||||
msg="Could not find 'comment' in the "
|
||||
"signature of function %s" % (h.__name__),
|
||||
)
|
||||
self.assertEqual(
|
||||
inspect.signature(h).parameters["comment"].annotation, Union[Any, None]
|
||||
)
|
||||
if isinstance(maybe_cursor, CommandCursor):
|
||||
maybe_cursor.close()
|
||||
tested = False
|
||||
# For some reason collection.list_indexes creates two commands and the first
|
||||
# one doesn't contain 'comment'.
|
||||
for i in results["started"]:
|
||||
if cc == i.command.get("comment", ""):
|
||||
self.assertEqual(cc, i.command["comment"])
|
||||
tested = True
|
||||
self.assertTrue(tested)
|
||||
if h not in [coll.aggregate_raw_batches]:
|
||||
self.assertIn(
|
||||
"`comment` (optional):",
|
||||
h.__doc__,
|
||||
)
|
||||
if h not in already_supported:
|
||||
self.assertIn(
|
||||
"Added ``comment`` parameter",
|
||||
h.__doc__,
|
||||
)
|
||||
else:
|
||||
self.assertNotIn(
|
||||
"Added ``comment`` parameter",
|
||||
h.__doc__,
|
||||
)
|
||||
|
||||
results.clear()
|
||||
|
||||
@client_context.require_version_min(4, 7, -1)
|
||||
@client_context.require_replica_set
|
||||
def test_database_helpers(self):
|
||||
listener = EventListener()
|
||||
db = rs_or_single_client(event_listeners=[listener]).db
|
||||
helpers = [
|
||||
(db.watch, []),
|
||||
(db.command, ["hello"]),
|
||||
(db.list_collections, []),
|
||||
(db.list_collection_names, []),
|
||||
(db.drop_collection, ["hello"]),
|
||||
(db.validate_collection, ["test"]),
|
||||
(db.dereference, [DBRef("collection", 1)]),
|
||||
]
|
||||
already_supported = [db.command, db.list_collections, db.list_collection_names]
|
||||
self._test_ops(helpers, already_supported, listener, db=db, coll=db.get_collection("test"))
|
||||
|
||||
@client_context.require_version_min(4, 7, -1)
|
||||
@client_context.require_replica_set
|
||||
def test_client_helpers(self):
|
||||
listener = EventListener()
|
||||
cli = rs_or_single_client(event_listeners=[listener])
|
||||
helpers = [
|
||||
(cli.watch, []),
|
||||
(cli.list_databases, []),
|
||||
(cli.list_database_names, []),
|
||||
(cli.drop_database, ["test"]),
|
||||
]
|
||||
already_supported = [
|
||||
cli.list_databases,
|
||||
]
|
||||
self._test_ops(helpers, already_supported, listener)
|
||||
|
||||
@client_context.require_version_min(4, 7, -1)
|
||||
def test_collection_helpers(self):
|
||||
listener = EventListener()
|
||||
db = rs_or_single_client(event_listeners=[listener])[self.db.name]
|
||||
coll = db.get_collection("test")
|
||||
|
||||
helpers = [
|
||||
(coll.list_indexes, []),
|
||||
(coll.drop, []),
|
||||
(coll.index_information, []),
|
||||
(coll.options, []),
|
||||
(coll.aggregate, [[{"$set": {"x": 1}}]]),
|
||||
(coll.aggregate_raw_batches, [[{"$set": {"x": 1}}]]),
|
||||
(coll.rename, ["temp_temp_temp"]),
|
||||
(coll.distinct, ["_id"]),
|
||||
(coll.find_one_and_delete, [{}]),
|
||||
(coll.find_one_and_replace, [{}, {}]),
|
||||
(coll.find_one_and_update, [{}, {"$set": {"a": 1}}]),
|
||||
(coll.estimated_document_count, []),
|
||||
(coll.count_documents, [{}]),
|
||||
(coll.create_indexes, [[IndexModel("a")]]),
|
||||
(coll.create_index, ["a"]),
|
||||
(coll.drop_index, [[("a", 1)]]),
|
||||
(coll.drop_indexes, []),
|
||||
]
|
||||
already_supported = [
|
||||
coll.estimated_document_count,
|
||||
coll.count_documents,
|
||||
coll.create_indexes,
|
||||
coll.drop_indexes,
|
||||
coll.options,
|
||||
coll.find_one_and_replace,
|
||||
coll.drop_index,
|
||||
coll.rename,
|
||||
coll.distinct,
|
||||
coll.find_one_and_delete,
|
||||
coll.find_one_and_update,
|
||||
]
|
||||
self._test_ops(helpers, already_supported, listener, coll=coll, db=db)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Reference in New Issue
Block a user