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

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

8.3版本新增。

$createObjectId

生成新的随机 ObjectId() 值。

使用 $createObjectId 在聚合管道或基于表达式的更新中生成唯一的 ObjectId 值。

示例,您可以生成新的标识符字段或替换现有的 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 并对结果去重。

要将此视图与需要稳定标识符的阶段一起使用,请创建第二个视图,添加一个带有$createObjectId: 的唯一 _id字段:

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" } }] )

在此管道中,$createObjectId 确保视图中的每个 document 在 _id 中都有唯一的 ObjectId 值。然后,依赖于稳定标识符的阶段可以正确区分 document。

给本页内容打分