避免在字段名称中使用美元符 ($) 或句号 (.)。MongoDB 存储在字段名称中使用这些字符的文档,但出于以下原因不建议使用这些字符:
对于所有类型的存储操作,字段名称的验证规则并不相同。
一般限制
使用美元 ($) 前缀的字段名称或包含句点 (.) 的字段名称有一些一般限制。这些字段不能:
编入索引
用作分片密钥的一部分
使用以下项进行验证:
$jsonSchema通过转义序列进行修改
与字段级加密一起使用
用作
_id文档中的子字段字段名称中超过 255 个单词,以句点分隔
(仅限
$-前缀)用作时间序列集合中 的一部分timeField时间序列集合(
$-前缀仅限)如果字段名称与 MongoDB 为内部文档元数据保留的字段名称冲突,则可在文档的根级使用。
MongoDB 为内部文档元数据保留一组 $ 前缀字段名称。如果数据中的根级字段名称与这些保留名称之一冲突,MongoDB 可能不会保留该字段或将其返回给查询,在某些情况下会从结果中删除该字段。这些保留名称是内部名称,可以在不同版本之间变更,因此不要将数据存储在根级 $ 前缀字段名称中,也不要依赖能够读回这些字段。
警告
美元符号 ($) 和句点 (.) 可能导致数据丢失。
使用以美元符号 ($) 为前缀的字段名称或包含句点 (.) 的字段名称时,如果在 MongoDB 5.0 之前的服务器上将这些字段名称与未确认的写入(写关注 w=0)结合使用,则数据丢失的可能性很小。
运行 insert、update 和 findAndModify 命令时,兼容 5.0 的驱动程序会取消对使用字段名称以美元 ($) 为前缀或包含句点 (.) 的文档的限制。在早期的驱动程序版本中,这些字段名称会产生客户端错误。
无论驱动程序连接到哪个服务器版本,这些限制均会被删除。如果 5.0 驱动程序将文档发送到较旧的服务器,则会拒绝该文档,而不会发送错误。
警告
使用美元符号 ($) 和句点 (.) 时的导入和导出问题
从MongoDB5.0 开始,文档字段名称可以以美元符号$ .() 为前缀,并且可以包含句点mongoimport ()。但是,在某些情况下,如果字段名称使用这些字符, 和mongoexport 可能无法按预期运行。
MongoDB 扩展 JSON v2 无法区分类型封装器和碰巧与类型封装器同名的字段。不要在相应的 BSON 表示可能包含美元 ($) 前缀键的上下文中使用扩展 JSON 格式。DBRef 机制是该一般规则的例外。
在字段名称中使用mongoimport 和 带句点mongoexport (). 也有限制。由于逗号分隔值(CSV)文件使用句点. () 表示数据层次结构,因此字段名称中的句点 (). 将被误解为嵌套级别。
了解详情
有关如何处理包含句点和美元符号的字段名称的示例,请参阅这些页面: