Tengo un campo de Id. Único del tipo int
en mis documentos. Estoy haciendo ensureIndex
en este campo, pero mis documentos aún contienen _id
. ¿Puedo deshacerme de eso?MongoDB: ¿es posible evitar el uso del campo _id automático?
Respuesta
Desde el docs ...
Si un usuario intenta insertar un documento sin proporcionar un campo _id, la base de datos generará automáticamente un objeto Identificación y almacenarla el campo _id.
Sin embargo, puede asignar su propio valor a _id ...
valor _ID puede ser de cualquier tipo, aparte de las matrices, con tal de que es un único.
La mejor pregunta es ¿por qué crear su propio identificador único, construir un índice sobre el mismo y retire la gran utilidad de objeto _id que está indexado automático?
Todos los pilotos oficiales de objeto utilizar y tiene una gran cantidad de muy buenos aspectos a ella:
Se ha construido una marca de tiempo en (por lo que no es necesario para almacenar un campo de fecha en su documento, y puede usarlo para ordenar por fecha.)
Es un "número de secuencia global y uniformemente creciente" --- es decir, , seguirá siendo único en todos los servidores si necesita fragmentar sus datos, etc.
No, no puede deshacerse de él, it is there by design, pero puede asignar su identificador único int
al al insertar documentos.
Una buena idea sería almacenar su hash en el campo _id.
Por lo tanto, la base de datos no creará automáticamente el campo _id porque ya existirá y ahorrará el espacio de un índice no utilizado.
Simplemente configure el campo _id como cualquier otro con el valor que desee (su hash por ejemplo). ¡Pero ten cuidado, tiene que ser único!
Para garantizar la unicidad deberías o que sea único o poner un subdocumento en el campo _id: {_id: {h: [yourHash], u: [un identificador único]}, ...}
Eso es exactamente lo que hice, matando a dos pájaros de una vez: mis documentos no contienen un ObjectID enorme, y no necesito llamar a 'ensureIndex' después de cada inserción - obtuve una aceleración significativa (nunca pensaría' ensureIndex 'es tan lento). –
@Violet Giraffe: No hay necesidad de llamar a 'ensureIndex' después de cada inserción, solo necesita ser llamado una vez durante la vida de la base de datos, al igual que con MySQL. Además, 'ObjectID' no es realmente un campo 'enorme'. Aún así, estoy de acuerdo en que usar hash tiene sentido. En la discusión de hash vs. id de objeto vs. guid, asegúrese de comprender las implicaciones a largo plazo de la coherencia y las posibles claves de fragmentos. – mnemosyn
- 1. mongoose (mongodb) Alias _id campo
- 2. Mongodb insertar documento sin el campo _id
- 3. ¿Es posible configurar el nombre del campo predeterminado de ObjectId en MongoDB?
- 4. ¿Es posible devolver un campo calculado de una consulta MongoDB?
- 5. Pregunto: ¿MongoDB _id es único por defecto?
- 6. mongodb upsert from java: cómo obtener _id del objeto existente?
- 7. ¿Es posible reducir el uso de la memoria MongoDB?
- 8. Mongodb campo único de configuración
- 9. ¿MongoDB selecciona dónde en array de _id?
- 10. ¿Cómo consultar documentos usando el campo "_id" en el controlador mongodb de Java?
- 11. ¿Qué es el campo "__v" en MongoDB
- 12. MongoDB: salida 'id' en lugar de '_id'
- 13. ¿Es posible emitir un MongoDB-Query?
- 14. Eliminar por _id en la consola MongoDB
- 15. Node.js mongodb seleccionar documento _id nodo-mongodb nativo
- 16. Responde en mongodb cuando se usan valores de _id personalizados
- 17. Devuelve el tipo real de un campo en MongoDB
- 18. Mongodb ¿Cambiar el atributo ObjectID o _id para un documento?
- 19. Mongoose recuperando datos sin _id campo
- 20. cómo gestionar campo _id al utilizar POCO con mongodb C# conductor
- 21. Diferencia entre los campos "id" y "_id" en MongoDB
- 22. obtener mongodb objeto _id después upsert con php
- 23. campo Actualizar en el conjunto de elementos exacta en MongoDB
- 24. ¿Cuál es la forma correcta de consultar MongoDB para _id utilizando cadena mediante Python?
- 25. Duplicar un documento en MongoDB usando un nuevo _id
- 26. El uso de MySQL y MongoDB juntos
- 27. Uso del controlador MongoDB C#: ¿envuelto o no envuelto?
- 28. Tienda _Id como objeto o cadena en MongoDB?
- 29. campo Mongodb no null delete
- 30. MongoDB: beneficios del uso de objetos incrustados
Gracias ¡tú! Soy nuevo en MongoDB y he echado de menos la parte de la documentación que ha citado. Y gracias por explicar los beneficios de usar ObjectID. Aún así, quiero usar mi ID porque es un hash (y debo almacenarlo en mi documento de todos modos), y es más pequeño que ObjectID. –
Feliz de ayudar, obviamente se trata de lo que es mejor para su aplicación, pero he encontrado que el ObjectID es muy útil en una serie de situaciones en las que no habría pensado cuando comencé. ¡Diviértete, http://learnmongo.com también puede ser útil para ti! –
¡Gracias por el excelente enlace! –