Puede configurar check_keys
a Falso según la fuente
:
test.insert(d,check_keys=False)
def insert(self, doc_or_docs, manipulate=True,
safe=None, check_keys=True, continue_on_error=False, **kwargs):
De hecho funciona:
In [28]: d = {'.aaa' : '.bbb'}
In [29]: test.insert(d,check_keys=False)
Out[29]: ObjectId('54ea604bf9664e211e8ed4e6')
La cadena de documentación dice:
Parece que puedes usar cualquier carácter además de los dos $
o .
por lo que un guión bajo inicial o cualquier otro carácter estaría bien y probablemente sea una mejor opción.
Hay información en las preguntas frecuentes sobre escapar :
Y las preguntas frecuentes de notación de puntos explican por qué usar .
no es una buena idea: