文档菜单
文档首页
/
MongoDB 手册
/ /

旧操作码

本页内容

  • OP_DELETE
  • OP_GET_MORE
  • OP_INSERT
  • OP_KILL_CURSORS
  • OP_QUERY
  • OP_REPLY
  • OP_UPDATE

本页描述了不再由 MongoDB 支持的旧操作码。这些旧操作码自 MongoDB 5.0 起已弃用,自 MongoDB 5.1 起不再支持。

  • 自 MongoDB 5.0 起弃用。

  • 自 MongoDB 5.1 起不再支持。

从 MongoDB 5.1 开始,OP_MSGOP_COMPRESSED 是发送请求到 MongoDB 服务器的唯一支持的操作码。

OP_DELETE消息用于从集合中删除一个或多个文档。OP_DELETE消息的格式为:

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 flags; // bit values - see below for details.
document selector; // query object. See below for details.
}
字段
描述
header
消息头部。见标准消息头部。
ZERO
整数值为0。保留供将来使用。
fullCollectionName
完整的集合名称,特别是它的命名空间。命名空间是数据库名称和集合名称的连接,使用点(.)进行连接。例如,对于数据库名称为test和集合名称为contacts的情况,完整的集合名称为test.contacts
flags

操作的操作标志位值:位值对应以下内容

  • 0对应SingleRemove。如果设置,则数据库将只删除集合中第一个匹配的文档。否则将删除所有匹配的文档。

  • 1-31保留。必须设置为0。

selector
BSON文档,表示用于选择要删除的文档的查询。选择器包含一个或多个元素,所有这些元素都必须匹配,才能从集合中删除文档。

没有对OP_DELETE消息的响应。

OP_GET_MORE消息用于查询集合中的文档。OP_GET_MORE消息的格式为:

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 numberToReturn; // number of documents to return
int64 cursorID; // cursorID from the OP_REPLY
}
字段
描述
header
消息头部。见标准消息头部。
ZERO
整数值为0。保留供将来使用。
fullCollectionName
完整的集合名称,特别是它的命名空间。命名空间是数据库名称和集合名称的连接,使用点(.)进行连接。例如,对于数据库名称为test和集合名称为contacts的情况,完整的集合名称为test.contacts
numberToReturn

限制第一个OP_REPLY 消息对查询的响应。然而,如果返回的结果数量超过 numberToReturn,数据库仍然会创建游标并将 cursorID 返回给客户端。如果客户端驱动程序提供了 'limit' 功能(类似于 SQL LIMIT 关键字),则客户端驱动程序负责确保返回给调用应用程序的文档数不超过指定的数量。

如果 numberToReturn

  • 0,数据库将使用默认的返回大小。

  • 负数,数据库将返回该数字并关闭游标。无法获取该查询的进一步结果。

  • 1,服务器将此值视为 -1(自动关闭游标)。

cursorID
游标标识符,来自 OP_REPLY。这必须是数据库中返回的值。

数据库将用 OP_REPLY 消息响应 OP_GET_MORE 消息。

OP_INSERT 消息用于将一个或多个文档插入到集合中。OP_INSERT 消息的格式是

struct {
MsgHeader header; // standard message header
int32 flags; // bit values - see below
cstring fullCollectionName; // "dbname.collectionname"
document* documents; // one or more documents to insert into the collection
}
字段
描述
header
消息头部。见标准消息头部。
flags

操作的操作标志位值:位值对应以下内容

  • 0 对应于 ContinueOnError。如果设置,数据库在批量插入失败时(例如,由于重复的 ID)不会停止处理批量插入。这使得批量插入的行为类似于一系列的单个插入,除非任何插入失败,lastError 也会被设置,而不仅仅是最后一个。如果发生多个错误,只有最新的错误将通过 getLastError 报告。

  • 1-31保留。必须设置为0。

fullCollectionName
完整的集合名称,特别是它的命名空间。命名空间是数据库名称和集合名称的连接,使用点(.)进行连接。例如,对于数据库名称为test和集合名称为contacts的情况,完整的集合名称为test.contacts
documents
要插入到集合中的一个或多个文档。如果有多个,它们将按顺序写入套接字,一个接一个。

对于 OP_INSERT 消息没有响应。

OP_KILL_CURSORS 消息用于关闭数据库中的活动游标。这是确保在查询结束时回收数据库资源所必需的。OP_KILL_CURSORS 消息的格式是

struct {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
int32 numberOfCursorIDs; // number of cursorIDs in message
int64* cursorIDs; // sequence of cursorIDs to close
}
字段
描述
header
消息头部。见标准消息头部。
ZERO
整数值为0。保留供将来使用。
numberOfCursorIDs
消息中cursor IDs的数量。
cursorIDs
"要关闭的cursor IDs的数组。如果有多个,它们将按顺序写入套接字,一个接一个。

如果一个cursor被读取到耗尽(读取到OP_QUERYOP_GET_MORE返回cursor id为零),则无需杀死该cursor。

OP_QUERY消息用于在集合中查询数据库文档。OP_QUERY消息的格式为

struct OP_QUERY {
MsgHeader header; // standard message header
int32 flags; // bit values of query options. See below for details.
cstring fullCollectionName ; // "dbname.collectionname"
int32 numberToSkip; // number of documents to skip
int32 numberToReturn; // number of documents to return
// in the first OP_REPLY batch
document query; // query object. See below for details.
[ document returnFieldsSelector; ] // Optional. Selector indicating the fields
// to return. See below for details.
}
字段
描述
header
消息头部。见标准消息头部。
flags

操作的操作标志位值:位值对应以下内容

  • 0是保留的。必须设置为0。

  • 1对应于TailableCursor。Tailable表示在检索到最后数据时,cursor不会被关闭。相反,cursor标记了最后一个对象的最后位置。如果收到更多数据,您可以稍后从该位置恢复使用cursor。像任何延迟cursor一样,cursor可能在某个时刻变得无效(CursorNotFound)——例如,如果它引用的最后一个对象被删除。

  • 2对应于SlaveOk。允许查询副本从服务器。通常这些会返回错误,除非是"local"命名空间。

  • 3对应于OplogReplay。您不需要指定此标志,因为对于oplog上符合条件的查询,优化会自动发生。有关更多信息,请参阅oplogReplay

  • 4对应于NoCursorTimeout。服务器通常会在一段时间不活动后(10分钟)超时空闲cursor,以防止过度使用内存。设置此选项可以防止这种情况。

  • 5对应于AwaitData。与TailableCursor一起使用。如果cursor位于数据末尾,则稍作阻塞而不是返回无数据。在超时期间,服务器按正常方式返回。

  • 6对应于Exhaust。将数据以多个"更多"包的形式流式传输下来,假设客户端将完全读取所有查询的数据。当您正在拉取大量数据并且知道您想全部拉下来时,这会更快。注意:除非客户端关闭连接,否则客户端不允许不读取所有数据。

  • 7对应于Partial。如果某些分片处于down状态(而不是抛出错误),则从mongos获取部分结果。

  • 8-31是保留的。必须设置为0。

fullCollectionName
完整的集合名称,特别是它的命名空间。命名空间是数据库名称和集合名称的连接,使用点(.)进行连接。例如,对于数据库名称为test和集合名称为contacts的情况,完整的集合名称为test.contacts
numberToSkip
设置要跳过的文档数量 - 从结果数据集的第一份文档开始 - 当返回查询结果时。
numberToReturn

限制查询的第一个OP_REPLY消息中的文档数量。然而,如果结果多于numberToReturn,数据库仍将创建游标并返回cursorID给客户端。如果客户端驱动程序提供'limit'功能(类似于SQL的LIMIT关键字),则客户端驱动程序负责确保返回给调用应用程序的文档数量不超过指定的数量。

如果 numberToReturn

  • 0,数据库将使用默认的返回大小。

  • 负数,数据库将返回该数字并关闭游标。无法获取该查询的进一步结果。

  • 1,服务器将此值视为 -1(自动关闭游标)。

查询
表示查询的BSON文档。查询包含一个或多个元素,所有这些元素都必须匹配才能将文档包含在结果集中。可能的元素包括$query$orderby$hint$explain
returnFieldsSelector

可选。限制返回文档的字段的BSON文档。`returnFieldsSelector`包含一个或多个元素,每个元素都是应返回的字段的名称,以及整数值`1`。在JSON表示法中,用于限制字段`a`、`b`和`c`的`returnFieldsSelector`将是

{ a : 1, b : 1, c : 1}

数据库将用OP_REPLY消息响应OP_QUERY消息。

注意

MongoDB 5.1移除了对OP_QUERY查找操作和OP_QUERY命令的支持。作为一个例外,OP_QUERY仍支持在连接握手过程中运行helloisMaster命令。

OP_REPLY消息是由数据库在响应OP_QUERYOP_GET_MORE消息时发送的。OP_REPLY消息的格式是

struct {
MsgHeader header; // standard message header
int32 responseFlags; // bit values - see details below
int64 cursorID; // cursor ID if client needs to do get more's
int32 startingFrom; // where in the cursor this reply is starting
int32 numberReturned; // number of documents in the reply
document* documents; // documents
}
字段
描述
header
消息头部。见标准消息头部。
responseFlags

操作的操作标志位值:位值对应以下内容

  • 0对应于CursorNotFound。当调用getMore但服务器上的游标ID无效时设置。返回零结果。

  • 1对应于QueryFailure。当查询失败时设置。结果包含一个包含描述失败的`$err`字段的文档。

  • 2对应于ShardConfigStale。驱动程序应忽略此内容。只有mongos会看到这个设置,在这种情况下,它需要从服务器更新配置。

  • 3 对应于 AwaitCapable。当服务器支持 AwaitData 查询选项时设置。如果不支持,客户端应在 Tailable 游标的一系列 getMore 之间稍微等待。

  • 4-31 已保留。忽略。

cursorID
此 OP_REPLY 是其一部分的 cursorID。如果查询的结果集适合一个 OP_REPLY 消息,则 cursorID 将为 0。此 cursorID 必须用于任何用于获取更多数据的 OP_GET_MORE 消息,并且也必须通过 OP_KILL_CURSORS 消息由客户端关闭。
startingFrom
游标中的起始位置。
numberReturned
回复中的文档数。
documents
返回的文档。

OP_UPDATE 消息用于在集合中更新文档。OP_UPDATE 消息的格式如下

struct OP_UPDATE {
MsgHeader header; // standard message header
int32 ZERO; // 0 - reserved for future use
cstring fullCollectionName; // "dbname.collectionname"
int32 flags; // bit values. see below
document selector; // the query to select the document
document update; // specification of the update to perform
}
字段
描述
header
消息头部。见标准消息头部。
ZERO
整数值为0。保留供将来使用。
fullCollectionName
完整的集合名称,特别是它的命名空间。命名空间是数据库名称和集合名称的连接,使用点(.)进行连接。例如,对于数据库名称为test和集合名称为contacts的情况,完整的集合名称为test.contacts
flags

操作的操作标志位值:位值对应以下内容

  • 0 对应于 Upsert。如果设置,数据库将在找不到匹配文档时将提供的对象插入到集合中。

  • 1 对应于 MultiUpdate。如果设置,数据库将更新集合中所有匹配的对象。否则,只更新第一个匹配的文档。

  • 2-31 已保留。必须设置为 0。

selector
指定要更新的文档的选择查询的 BSON 文档。
update
指定要执行的更新的 BSON 文档。有关指定更新的信息,请参阅更新操作文档。

对于 OP_UPDATE 消息没有响应。

返回

线协议