¿Cómo autoincrementar la identificación en cada inserción en Pymongo?

Estoy usando pymongo para insertar documentos en el mongodb. Aquí está el código para el archivo router.py

temp = db.admin_collection.find().sort( [("_id", -1)] ).limit(1) for doc in temp: admin_id = str(int(doc['_id']) + 1) admin_doc ={ '_id' : admin_id, 'question' : ques, 'answer' : ans, } collection.insert(admin_doc) 

¿Qué debo hacer para que en cada inserción _id se incremente en 1?

No parece una muy buena idea, pero si realmente quieres seguir adelante con ella, puedes intentar la configuración como se muestra a continuación.

Debería funcionar lo suficientemente bien en una aplicación de bajo tráfico con un solo servidor, pero no intentaría nada como esto con un entorno duplicado o fragmentado o si realiza una gran cantidad de inserciones.

Crear una colección separada para manejar las secuencias de identificación:

 db.seqs.insert({ 'collection' : 'admin_collection', 'id' : 0 }) 

Cuando necesite insertar un nuevo documento, use algo similar a esto:

 def insert_doc(doc): doc['_id'] = str(db.seqs.find_and_modify( query={ 'collection' : 'admin_collection' }, update={'$inc': {'id': 1}}, fields={'id': 1, '_id': 0}, new=True ).get('id')) try: db.admin_collection.insert(doc) except pymongo.errors.DuplicateKeyError as e: insert_doc(doc) 

Si desea cambiar manualmente el valor “_id”, puede hacerlo cambiando el valor _id en el documento devuelto. Puede hacer esto de una manera similar a la que ha propuesto en su pregunta. Sin embargo no creo que este enfoque sea aconsejable .

 curs = db.admin_collection.find().sort( [("_id", -1)] ).limit(1) for document in curs: document['_id'] = str(int(document['_id']) + 1) collection.insert(document) 

En general, no es una buena idea hacer manualmente sus propias ID. Estos valores deben ser únicos y no hay garantía de que str (int (documento [‘_ id’]) + 1) siempre sea único.

En cambio, si desea duplicar el documento, puede eliminar la clave ‘_id’ e insertar el documento.

 curs = db.admin_collection.find().sort( [("_id", -1)] ).limit(1) for document in curs: document.pop('_id',None) collection.insert(document) 

Esto inserta el documento y permite que mongo genere la ID única.