2

私はmongodbデータベースに基づく2つのプロジェクトを持っています。1つのプロジェクトはcsharp-mongodbを使用し、別のプロジェクトは-normドライバーを使用します。

GetCollectionなどのジェネリックメソッドを使用してのみデータベースにリクエストを送信します。苦痛を抑えてエンティティに新しいフィールドを追加するにはどうすればよいですか?

たとえば、最初に私は持っています

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

数日で私は新しいフィールドを追加することにしました

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

私には1つの方法しかありません-エンティティを取得し、それを逆シリアル化し、新しいタイプに変換してから、bsonにシリアル化するユーティリティを作成します。私に関しては、私が100万を超えるレコードを持っていることを理解すると、それは難しい方法です。

私はcsharpmongodbドライバーがdocumnetsを操作する能力を持っていることを知っています:)

4

2 に答える 2

1

Normドライバーを使用している場合、新しく追加されたフィールドは、挿入および取得時に自動的に更新されます。手動で逆シリアル化する必要はありません。

再取得すると、古いドキュメントの場合、新しいフィールドLastnameはnullとして返されます。挿入すると、この新しいフィールドがドキュメントに追加されます。

于 2010-12-06T10:00:12.980 に答える
0

@Antony、新しいフィールドを取得したら、すべてのレコードを更新する必要がありますか? 遅延更新を選択してみてください - リクエスト内の各古いレコードを更新してください。ただし、すべての新しいスタイルのレコードにはすべてのレコード フィールドがあります。

サムスドライバーが好きです。もちろん、BSON ドキュメントで動作しますが、一部のレコードを更新する場合、MongoDB は部分ではなく完全な BSON ドキュメントを返します。私はMongoDBの初心者ですが、MongoDBがドキュメントの一部を返すことができないことを理解しています。ユーティリティのように機能します: get -> deserialize -> update -> serialize -> save; 1M-10M レコードについて話すとき、それは難しい方法だとは思いません;)

于 2010-12-05T15:23:37.353 に答える