Ignoring Extra Elements in mongoDB C# Driver
5227 단어 mongodb
실체류에 [BsonIgnoreExtraElements]//usingMongoDB를 추가해야 합니다.Bson.Serialization.Attributes;
이 외국인의 문장을 참고하시오.
mongoDB affords you the ability to store documents within a single collection that can each have their own schema. This is a drastic change if you have a background in relational databases. In a relational database, you have a static schema per table and you cannot deviate from without changing the structure of the table.
In the example below, I have defined a
Person
class and a PersonWithBirthDate
class which derives from the Person
class. These can both be stored in the same collection in a mongoDB database. In this case, assume the documents are stored in the Persons
collection. public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PersonWithBirthDate : Person
{
public DateTime DateOfBirth { get; set; }
}
You can easily retrieve and of the documents and have the mongoDB C# Driver deserialze the document into the
PersonWithBirthDate
class. However, you will run into issues if you query the Persons
collection and try to have the driver deserialize the data into the Person
class. You will receive an error that there are elements that cannot be deserialized. This easily fixable by adding the
[BsonIgnoreExtraElements]
attribute to the Person
class. You can see the modified class below. This will instruct the driver to ignore any elements that it cannot deserialize into a corresponding property. With the attribute any document in the Persons
collection can be deserailized to the Person
class without error. [BsonIgnoreExtraElements]
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PersonWithBirthDate : Person
{
public DateTime DateOfBirth { get; set; }
}
There is a gotcha that I recently found while trying to implement a scenario similar to the one above. In the source code for the mongo C# driver , the attribute is defined in a way that it can be inherited to the child classes when applied to the parent class ( BsonIgnoreExtraElementsAttribute.cs ). However, when the attribute is read, it ignores the inheritance of the attribute ( BsonClassMap.cs ) and does not get applied to the child classes. I agree with this implementation, but it’s a little confusing if you review the source code for the definition of the
[BsonIgnoreExtraElements]
attribute. Even with this inconsistency, all you need to do is to apply the [BsonIgnoreExtraElements]
to each class that may read a document from a collection where there are extra elements.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
레코드를 업데이트하고 업데이트 전에 동일한 레코드를 삭제하는 방법(nest js & mongoDB)ID로 레코드를 업데이트하고 싶지만 업데이트 전에 동일한 레코드에 이전에 저장된 데이터를 삭제하고 싶습니다. 프로세스는 무엇입니까? 컨트롤러.ts 서비스.ts 나는 이것을 해결하기 위해 이런 식으로 노력하고 있습니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.