Est-il possible que le même ObjectId Mongo soit généré pour un document dans deux collections différentes ? Je réalise que c'est très peu probable, mais est-ce possible ?
Sans être trop précis, la raison de ma question est qu'avec une application sur laquelle je travaille, nous montrons au public des profils d'élus que nous espérons convertir en utilisateurs à part entière de notre site. Nous avons des collections distinctes pour les utilisateurs et les élus qui ne sont pas actuellement membres de notre site. Il existe divers autres documents contenant divers éléments de données sur les élus, qui renvoient tous à la personne en utilisant son ObjectId d'élu.
Après la création du compte, nous mettons toujours en évidence les données associées à l'élu, mais il fait désormais partie de la collection des utilisateurs avec un ObjectId correspondant pour associer son profil aux interactions avec notre application.
Nous avons commencé à convertir notre application de MySql à Mongo il y a quelques mois et, pendant la transition, nous stockons l'ancien identifiant MySql pour ces deux types de données et nous commençons également à stocker l'identifiant d'objet Mongo de l'élu dans le document des utilisateurs pour le faire correspondre aux données de l'élu.
Je pensais simplement spécifier le nouvel ObjectId de l'utilisateur comme l'ObjectId de l'ancien élu pour simplifier les choses, mais je voulais m'assurer qu'il n'était pas possible d'avoir une collision avec un ObjectId d'utilisateur existant.
Merci de votre perspicacité.
Edit : Peu après avoir posté cette question, j'ai réalisé que la solution que je proposais n'était pas une très bonne idée. Il serait préférable de conserver le schéma actuel que nous avons mis en place et de créer un lien vers l'élu '_id' dans le document des utilisateurs.
0 votes
Voir mongodb.org/display/DOCS/Object+IDs
1 votes
J'ai déjà lu cette page. Ironiquement, j'ai fait un lien vers la même page dans une réponse précédente. Et j'ai bien vu l'avertissement "probabilité raisonnablement élevée d'être unique", mais je n'étais pas sûr que la collection dans laquelle il est inséré joue un rôle à cet égard. Je suppose que ce que je ne sais pas, c'est ce que représente exactement la portion de 2 octets de l'ID de processus de l'ObjectId. Si cela a quelque chose à voir avec la collection, alors il y aurait unicité entre deux documents différents créés exactement au même moment sur la même machine dans des collections différentes.
1 votes
L'id de processus de 2byte est le pid du processus générant l'ObjectID. A titre d'exemple, voici le code que pymongo utilise pour générer les ObjectIDs : github.com/mongodb/mongo-python-driver/blob/master/bson/
0 votes
J'ai rencontré un problème avec l'insertion par lots. Je construisais des lots de 10 000 documents, et j'entrais en collision à chaque fois parce que la portion de compteur se retournait à chaque fois.
0 votes
Je sais que ça fait un moment, mais les documents 10K ne roulaient pas sur le comptoir. La partie compteur est de trois octets, pas de trois chiffres. C'est plus de 16 millions.