
MongoDBBSONJavascript::unserialize 함수를 사용하여 BSON 데이터를 deserialize 할 때, 특정 필드가 무조건 null로 초기화되는 현상은 BSON의 특성상, serialize 할 때 필드의 타입이 Object로 serialize 되기 때문입니다.
예를 들어, address 필드는 Object 타입의 필드이기 때문에, serialize 할 때는 Object 형태로 serialize 됩니다. 그런 다음, unserialize 할 때는 Object 타입의 필드로 unserialize 됩니다. 그러나, Object 타입의 필드는 null로 초기화 될 수 있기 때문에, address 필드는 무조건 null로 초기화 될 수 있습니다.
필드의 타입이 변경되는 현상은 BSON의 타입 시스템에 의해 결정됩니다. BSON은 기본적으로 String, Integer, Double, Boolean, Object, Array, Null, Undefined, Regular Expression, Date, Timestamp, Binary, ObjectId, Code, Symbol, MinKey, MaxKey 타입을 지원합니다.
예를 들어, serialize 할 때 age 필드는 Integer 타입으로 serialize 됩니다. 그러나, unserialize 할 때는 age 필드의 타입이 변경되어 Double 타입으로 unserialize 될 수 있습니다.
이러한 현상은 BSON의 타입 시스템과 serialize/ unserialize 프로세스의 특성상 발생하는 것입니다.
따라서, serialize/ unserialize 할 때 필드의 타입을 명시적으로 지정하여, 타입의 불일치를 피할 수 있습니다.
예를 들어, serialize 할 때 age 필드를 Integer 타입으로 serialize 하고, unserialize 할 때 age 필드를 Integer 타입으로 unserialize 할 수 있습니다.
#hostingforum.kr
javascript
const bson = new BSON();
const data = {
name: '홍길동',
age: 30,
address: {
street: '서울시',
city: '강남구'
}
};
const serializedData = bson.serialize(data);
console.log(serializedData);
const unserializedData = bson.unserialize(serializedData);
console.log(unserializedData);
위의 예제에서, age 필드는 Integer 타입으로 serialize되고, unserialize 할 때도 Integer 타입으로 unserialize됩니다.
따라서, serialize/ unserialize 할 때 필드의 타입을 명시적으로 지정하여, 타입의 불일치를 피할 수 있습니다.
2025-05-02 23:30