2010-11-08 6 views
2

J'expérimente avec Mongodb et NoRM en C#. D'après ce que j'ai lu l'ObjectId qui identifie de manière unique un document dans Mongodb est une sorte de Guid "spécial" (au sens unique) mais avec des parties significatives qui permettent un tri et une indexation plus faciles (horodatage, hash machine, processId et incrémentation). Je voudrais garder mes objets vraiment POCO avec un Guid autogénéré comme Id, sans aucun type externe comme ObjectId qui m'empêcherait de migrer vers une autre technologie ou de revenir à des choses classiques Ado.net ou Nhibernate.Mongodb NoRM et POCO

Une autre option serait d'utiliser dans le POCO un identifiant en tant que chaîne et utiliser ObjectId.NewObjectId().ToString()

Quelles sont les meilleures pratiques pour cela?

+0

Pourquoi diable utiliseriez-vous NoRM, il n'a pas été mis à jour depuis des années et dit «ne l'utilisez pas, utilisez le pilote officiel». –

Répondre

2

Les objets ne sont pas des guids. Guid est le nom que MS donne pour la version d'UUID qu'ils utilisent. ObjectIds sont un algorithme complètement différent.

Cela étant dit, vous pouvez utiliser ce que vous voulez comme une carte d'identité en mongo, et il ne sera pas des pénalités de performance (dans le monde des rails, quelques-unes des ORM avocat en utilisant des chaînes)

ObjectId est utilisé en Mongo surtout pour économiser de la taille. Si c'est un gros problème, utilisez simplement autre chose, sachez que l'utilisation de champs d'ID inutiles finira par gaspiller du ram. Mais si c'est un gros problème, alors optez pour Guids.

0

Vous pouvez utiliser n'importe quel type de _id, comme l'a dit Matt, à condition qu'il soit unique dans sa collection.

Le stockage de l'UUID dans le type [DOC: BSON] est le plus efficace, mais vous pouvez également utiliser une chaîne hexadécimale si l'espace et la vitesse ne sont pas un problème.