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.