#5612·FerretDB

使用点表示法查询嵌套数组字段时,findOneAndUpdate 返回 null

作者: jsyoo创建于 2026年3月30日更新于 2026年7月20日

□ 说明

find OneAndUpdate' 返回null',当使用点符号查询一个嵌入式阵列字段(例如'触发器.identifer':value')时,而`find One'在同一查询中工作正确。

□ FerretDB 版本

v1.24 (PostgreSQL后端) (英语).

□ 步骤重现

[JavaScript] / 插入带有嵌入式阵列字段的文档 db.templates. 插入一号({ 名称:'测试-工作流程', EnvironmentId: ObjectId('69ba499642dcb2ae31dc3d78'), 出自: 触发: [{标识符:'test-workflow',类型:'event'}], 活动: 真实,

  • ;

// 找到一个作品 {} db.templates.find One({'trigers.identifer':'test-workflow'}; / 返回文档

/ 找到 OneAnd Update 失败 {} db.templates. find One And Update () (原始内容存档于2018-09-29). {'trigers.identifer':'test-work flow'}, , , , , , , , , { $set: {上个调试日期: }} , {还原文件:'after'} (三) // 返回无效( 预期: 文件)

/ 找到 OneAndUpdate 与无记名字段相配合 {} db.templates. find One And Update () (原始内容存档于2018-09-29). {名称:'测试-工作流程'}, { $set: {上个调试日期: }} , {还原文件:'after'} (三) / 返回文档


□ 预期行为

`Find OneAndUpdate'在使用嵌入式阵列字段的点标记时,应当返回匹配文档,与`FindOne'行为一致。

□ 实际行为

`Find OneAndUpdate' 返回`null',当查询使用嵌入式阵列字段(`'trigers.identifer')上标记时,即使`find One'在同一查询中找到文档。

□ 内容

这一问题影响到[新 (https://GitHub.com/novuhq/novu)(通知基础设施)在FerretDB上运行。 Novu的工人使用`Find OneAndUpdate'用`'tigers.identifer'来查看通知模板,这种模板在FerretDB上总是失败,使得所有工作流程触发器不起作用。

来源:https://GitHub.com/novuhq/novu/blob/v2.1.1/libs/dal/src/repositories/notification-template/notific-template.repository.ts#L57

# 工作间 #

目前使用Novu特定的工作包(在触发请求中通过`BridgeUrl'绕过模板搜索)。 这不适合生产使用。

□ 注释

这可能在 v2.x 中被固定 。 我们还没有测试最新版本。 如果是的话,请告诉我们,我们会升级.

内容来源: FerretDB/FerretDB