MongoDB允许字段名称包含美元符号 ($
) 或句点 (.
)。但是,不鼓励在字段名称中使用这些字符,因为MongoDB不支持这些字段的某些功能。
在大多数情况下,使用此类字段名称存储的数据无法直接访问。 您需要在访问权限这些字段的查询中使用 、 $getField
、 $setField
和$literal
等辅助方法。
对于所有类型的存储操作,字段名称的验证规则并不相同。
一般限制
使用带有美元符号 ($
) 前缀的字段名称或包含句点 (.
) 的字段名称有一些一般限制。这些字段不能:
编入索引
用作分片密钥的一部分
使用以下项进行验证:
$jsonSchema
使用转义序列进行修改
用作
_id
文档中的子字段
警告
美元符号 ($) 和句点 (.) 可能导致数据丢失。
使用以美元符号 ($
) 为前缀的字段名称或包含句点 (.
) 的字段名称时,如果在 MongoDB 5.0 之前的服务器上将这些字段名称与未确认的写入(写关注 w=0
)结合使用,则数据丢失的可能性很小。
运行 insert
、update
和 findAndModify
命令时,兼容 5.0 的驱动程序会取消对使用字段名称以美元 ($
) 为前缀或包含句点 (.
) 的文档的限制。在早期的驱动程序版本中,这些字段名称会产生客户端错误。
无论驱动程序连接到哪个服务器版本,这些限制均会被删除。如果 5.0 驱动程序将文档发送到较旧的服务器,则会拒绝该文档,而不会发送错误。
警告
使用美元符号 ($) 和句点 (.) 时的导入和导出问题
从 MongoDB 5.0 开始,文档字段名称可以是美元 ($
) 前缀,并且可以包含句点 (.
)。但是,对于使用这些字符的字段名称,mongoimport
和 mongoexport
在某些情况下可能无法按预期运行。
MongoDB 扩展 JSON v2 无法区分类型封装器和碰巧与类型封装器同名的字段。不要在相应的 BSON 表示可能包含美元 ($
) 前缀键的上下文中使用扩展 JSON 格式。DBRef 机制是该一般规则的例外。
在字段名中使用带句号 (.
) 的 mongoimport
和 mongoexport
也有限制。由于 CSV 文件使用句点 (.
) 表示数据层次结构,因此字段名称中的句点 (.
) 会被误读为嵌套级别。
了解详情
有关如何处理包含句点和美元符号的字段名称的示例,请参阅这些页面: