Database Manual / Reference / Query Language / Aggregation Stages

$listSessions (aggregation stage)(聚合阶段)

Definition定义

$listSessions

Lists all sessions stored in the system.sessions collection in the config database. These sessions are visible to all members of the MongoDB deployment.列出配置数据库中system.sessions集合中存储的所有会话。这些会话对MongoDB部署的所有成员都是可见的。

Important

When a user creates a session on a mongod or mongos instance, the record of the session initially exists only in-memory on the instance; i.e. the record is local to the instance. 当用户在mongodmongos实例上创建会话时,会话的记录最初只存在于实例的内存中;即,记录是实例的本地记录。Periodically, the instance will sync its cached sessions to the system.sessions collection in the config database, at which time, they are visible to $listSessions and all members of the deployment. 实例会定期将其缓存的会话同步到配置数据库中的system.sessions集合,此时,$listSessions和部署的所有成员都可以看到这些会话。Until the session record exists in the system.sessions collection, you can only list the session via the $listLocalSessions operation.system.sessions集合中存在会话记录之前,您只能通过$listLocalSessions操作列出会话。

To run $listSessions, it must be the first stage in the pipeline.要运行$listSessions,它必须是管道中的第一阶段。

The stage has the following syntax:该阶段具有以下语法:

{ $listSessions: <document> }

The $listSessions stage takes a document with one of the following contents:$listSessions阶段接收具有以下内容之一的文档:

Field字段Description描述
{ }

If running with access control, returns all sessions for the current authenticated user.如果使用访问控制运行,则返回当前已验证用户的所有会话。

If running without access control, returns all sessions.如果在没有访问控制的情况下运行,则返回所有会话。

{ users: [ { user: <user>, db: <db> }, ... ] }Returns all sessions for the specified users. If running with access control, the authenticated user must have privileges with listSessions action on the cluster to list sessions for other users.返回指定用户的所有会话。如果使用访问控制运行,则经过身份验证的用户必须具有群集上listSessions操作的权限,才能为其他用户列出会话。
{ allUsers: true }Returns all sessions for all users. If running with access control, the authenticated user must have privileges with listSessions action on the cluster.返回所有用户的所有会话。如果使用访问控制运行,则经过身份验证的用户必须具有群集上listSessions操作的权限。

Restrictions限制

$listSessions is not allowed in transactions.事务中不允许使用$listSessions

Examples示例

MongoDB Shell

List All Sessions列出所有会话

From the system.sessions collection, the following aggregation operation lists all sessions:system.sessions集合中,以下聚合操作列出了所有会话:

Note

If running with access control, the current user must have privileges with listSessions action on the cluster.如果使用访问控制运行,则当前用户必须具有群集上listSessions操作的权限。

use config

db.system.sessions.aggregate( [ { $listSessions: { allUsers: true } } ] )

List All Sessions for the Specified Users列出指定用户的所有会话

From the system.sessions collection, the following aggregation operation lists all sessions for the specified user myAppReader@test:system.sessions集合中,以下聚合操作列出了指定用户的所有会话myAppReader@test

Note

If running with access control and the current user is not the specified user, the current user must have privileges with listSessions action on the cluster.如果使用访问控制运行,并且当前用户不是指定的用户,则当前用户必须具有群集上listSessions操作的权限。

use config

db.system.sessions.aggregate( [ { $listSessions: { users: [ {user: "myAppReader", db: "test" } ] } } ] )

List All Sessions for the Current User列出当前用户的所有会话

From the system.sessions collection, the following aggregation operation lists all sessions for the current user if run with access control:如果使用访问控制运行,以下聚合操作将从system.sessions集合中列出当前用户的所有会话:

use config

db.system.sessions.aggregate( [ { $listSessions: { } } ] )

If run without access control, the operation lists all sessions.如果在没有访问控制的情况下运行,该操作将列出所有会话。

Node.js

To use the MongoDB Node.js driver to add a $listSessions stage to an aggregation pipeline, use the $listSessions operator in a pipeline object. 要使用MongoDB Node.js驱动程序将$listSessions阶段添加到聚合管道中,请在管道对象中使用$listSessions运算符。Run the pipeline on the system.sessions collection.system.sessions集合上运行管道。

List All Sessions列出所有会话

The following aggregation operation lists all sessions:以下聚合操作列出了所有会话:

const db = client.db("config");
const collection = db.collection("system.sessions");

const pipeline = [{ $listSessions: { allUsers: true } }];

const cursor = collection.aggregate(pipeline);
return cursor;

Note

If running with access control, the current user must have privileges with listSessions action on the cluster.如果使用访问控制运行,则当前用户必须具有群集上listSessions操作的权限。

List All Sessions for the Specified Users列出指定用户的所有会话

The following aggregation operation lists all sessions for the specified user myAppReader@test:以下聚合操作列出了指定用户的所有会话myAppReader@test

const db = client.db("config");
const collection = db.collection("system.sessions");

const pipeline = [
{
$listSessions: {
users: [{ user: "myAppReader", db: "test"}]
}
}
];

const cursor = collection.aggregate(pipeline);
return cursor;

Note

If running with access control and the current user is not the specified user, the current user must have privileges with listSessions action on the cluster.如果使用访问控制运行,并且当前用户不是指定的用户,则当前用户必须具有群集上listSessions操作的权限。

List All Sessions for the Current User列出当前用户的所有会话

If run with access control, the following aggregation operation lists all sessions for the current user:如果使用访问控制运行,以下聚合操作将列出当前用户的所有会话:

const db = client.db("config");
const collection = db.collection("system.sessions");

const pipeline = [{ $listSessions: {} }];

const cursor = collection.aggregate(pipeline);
return cursor;

If run without access control, the operation lists all sessions.如果在没有访问控制的情况下运行,该操作将列出所有会话。