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

带句点和美元符号的字段名

避免在字段名称中使用美元符 ($) 或句号 (.)。MongoDB 存储在字段名称中使用这些字符的文档,但出于以下原因不建议使用这些字符:

  • Query performance. You can't index these fields, which can make queries on them less efficient. To learn which other features these fields can't use, see General Restrictions.

  • 可查询性。您无法直接查询这些字段。要读取或修改这些字段,您需要使用 $getField、$setField 和 $literal 等辅助方法。如果没有这些辅助工具,MongoDB 会将包含句号的字段名解释为嵌入字段的路径。

对于所有类型的存储操作,字段名称的验证规则并不相同。

使用美元 ($) 前缀的字段名称或包含句点 (.) 的字段名称有一些一般限制。这些字段不能:

  • 编入索引

  • 用作分片密钥的一部分

  • 使用以下项进行验证: $jsonSchema

  • 通过转义序列进行修改

  • 与字段级加密一起使用

  • 用作 _id 文档中的子字段

  • 字段名称中超过 255 个单词,以句点分隔

  • ($-前缀仅限)如果字段名称与 MongoDB 为内部文档元数据保留的字段名称冲突,则可在文档的根级使用。

MongoDB 为内部文档元数据保留一组 $ 前缀字段名称。如果数据中的根级字段名称与这些保留名称之一冲突,MongoDB 可能不会保留该字段或将其返回给查询,在某些情况下会从结果中删除该字段。这些保留名称是内部名称,可以在不同版本之间变更,因此不要将数据存储在根级 $ 前缀字段名称中,也不要依赖能够读回这些字段。

警告

美元符号 ($) 和句点 (.) 可能导致数据丢失。

使用以美元符号 ($) 为前缀的字段名称或包含句点 (.) 的字段名称时,如果在 MongoDB 5.0 之前的服务器上将这些字段名称与未确认的写入(写关注 w=0)结合使用,则数据丢失的可能性很小。

运行 insert、update 和 findAndModify 命令时,兼容 5.0 的驱动程序会取消对使用字段名称以美元 ($) 为前缀或包含句点 (.) 的文档的限制。在早期的驱动程序版本中,这些字段名称会产生客户端错误。

无论驱动程序连接到哪个服务器版本,这些限制均会被删除。如果 5.0 驱动程序将文档发送到较旧的服务器,则会拒绝该文档,而不会发送错误。

警告

使用美元符号 ($) 和句点 (.) 时的导入和导出问题

Starting in MongoDB 5.0, document field names can be dollar ($) prefixed and can contain periods (.). However, mongoimport and mongoexport may not work as expected in some situations with field names that make use of these characters.

MongoDB 扩展 JSON v2 无法区分类型封装器和碰巧与类型封装器同名的字段。不要在相应的 BSON 表示可能包含美元 ($) 前缀键的上下文中使用扩展 JSON 格式。DBRef 机制是该一般规则的例外。

There are also restrictions on using mongoimport and mongoexport with periods (.) in field names. Since CSV files use the period (.) to represent data hierarchies, a period (.) in a field name will be misinterpreted as a level of nesting.

有关如何处理包含句点和美元符号的字段名称的示例,请参阅这些页面:

给本页内容打分