2010-12-05 41 views
2

J'ai deux projets qui sont basés sur la base de données mongodb. Un projet utilise csharp-mongodb et un autre - pilote de norme.comment ajouter un nouveau champ dans mongodb, si j'utilise les pilotes norm ou csharp-mongodb

Je demande à ma base de données uniquement avec des méthodes génériques comme GetCollection. Comment puis-je ajouter un nouveau champ à mon entité avec moins de douleur?

Par exemple, Au début j'ai

public class MyEntity 
{ 
    public int _id {get;set;} 
    public string Firstname {get;set;} 
} 

dans quelques jours, j'ai décidé d'ajouter un nouveau champ

public class MyEntity 
{ 
    public int _id {get;set;} 
    public string Firstname {get;set;} 
    public string Lastname {get;set;} //here is 
} 

Je vois qu'une seule façon - faire utilitaire qui obtenir mon entité puis désérialiser et convertir en nouveau type, puis sérialiser en bson. Quant à moi - c'est difficile - étant entendu que j'ai plus d'un million d'enregistrements.

Je sais que le pilote csharp de MongoDB ont la possibilité de travailler avec documnets :)

Répondre

1

Si vous utilisez le pilote Norm, les champs nouvellement ajoutés sont automatiquement mis à jour lors de l'insertion et de la récupération. Vous n'avez pas à faire de désérialisation manuelle.

lors de la relance, le nouveau champ Nom sera retourné comme nul pour les documents anciens. Lors de l'insertion, ce nouveau champ sera ajouté au document.

+0

merci, pour votre réponse. –

0

@Antony, vous devez mettre à jour tous les enregistrements lorsque vous obtenez nouveau champ? Essayez de choisir la mise à jour paresseuse - mettre à jour chaque ancien enregistrement dans la demande. Mais tous les nouveaux enregistrements auront tous les champs d'enregistrement.

J'aime samus driver. Bien sûr, cela fonctionne avec les documents BSON, mais quand vous voulez mettre à jour un enregistrement, MongoDB retourne un document BSON complet, pas la partie. Je suis nouveau dans MongoDB, mais comme je comprends, MongoDB ne peut pas retourner une partie du document. Cela fonctionne comme votre utilitaire: get -> deserialize -> update -> serialize -> save; Je ne pense pas que ce soit difficile quand on parle d'enregistrements 1M-10M;)

+0

MongoDB peut retourner une partie de certains objets voici le lien: http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields je ne sais pas comment il a été réalisé en csharp -mongodb driver (je n'ai pas besoin d'effectuer cette opération dans mon application). Mon problème est: j'ai environ 100 000 enregistrements avec le type MyEntity, puis j'ajoute un nouveau champ dans la classe puis je ne peux pas désérialiser l'ancien type à mon nouveau type (erreur d'exécution). Je pense que ce sera cool si le pilote mongo peut init cette valeur avec la valeur par défaut, à savoir par défaut (T) –

+0

@Antony, de jolis détails sur les sous-ensembles de champs;) – Edward83

+0

@Antony, si vous posez votre question ici http://groups.google.com/group/mongodb-csharp s'il vous plaît donner un lien;) – Edward83