Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs 菜单
Docs 主页
/ /

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

8.3版本新增

$createObjectId

生成新的随机ObjectId() 值。

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

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

$createObjectId 通过以下语法实现:

{
$createObjectId: { }
}

注意

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

$createObjectId 行为如下:

Argument
行为

{}

任何其他值

操作失败并返回 FailedToParse

提示

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

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

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

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

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

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

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

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

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

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

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

后退

$covarianceSamp

在此页面上