对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

$createObjectId(聚合)(表达式操作符)

8.3版本新增。

$createObjectId

生成新的随机 ObjectId() 值。

Use $createObjectId to generate unique ObjectId values in an aggregation pipeline or expression-based update.

示例,您可以生成新的标识符字段或替换现有的 id 值,以便其他阶段可以区分 document。这包括依赖于稳定 _id 值的操作符,例如 $graphLookup

$createObjectId 通过以下语法实现:

{
$createObjectId: { }
}

注意

必须使用空对象({}) 作为参数。

$createObjectId 行为如下:

Argument
行为

{}

返回BSON类型ObjectId()的新随机值。

任何其他值

操作失败并返回 FailedToParse

提示

要将现有值转换为 ObjectId,请使用 $toObjectId

本页上的示例使用sample_mflix示例数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载示例数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。

此示例将 ObjectId 值添加到视图中,以便其他聚合阶段可以依赖稳定的 _id 值。

sample_mflix数据库中,通过 movies集合创建视图,隐藏原始 _id字段:

db.createView(
"moviesView",
"movies",
[
{ $project: { _id: 0, title: 1, cast: 1 } }
]
)

依赖 _id 的阶段在此视图下无法按预期运行,因为 document 不再具有 _id字段。示例,像 $graphLookup 这样的图表遍历阶段在内部使用 _id 来追踪已访问的 document 并对结果去重。

To use this view with stages that expect a stable identifier, create a second view that adds a unique _id field with $createObjectId:

db.createView(
"moviesViewWithId",
"moviesView",
[
{
$project: {
_id: { $createObjectId: {} }, // unique id
title: 1,
cast: 1
}
}
]
)

现在,您可以运行一个聚合,将 moviesViewWithId 中的每个 document 视为不同的节点。示例,以下 $graphLookup 阶段会查找与每部电影股票演员阵容的其他电影:

db.movies.aggregate( [
{
$graphLookup: {
from: "moviesViewWithId",
startWith: "$cast",
connectFromField: "cast",
connectToField: "cast",
as: "relatedMovies"
}
}
] )

In this pipeline, $createObjectId ensures that each document in the view has a unique ObjectId value in _id. Stages that depend on a stable identifier can then distinguish between documents correctly.

给本页内容打分