개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.24 00:32

MongoDBBSONPackedArray::serialize 관련 질문

목록
  • UI디자이너 1일 전 2025.06.24 00:32
  • 9
    1
제가 MongoDBBSONPackedArray::serialize 메서드를 사용하여 BSON 데이터를 serialize 할 때, PackedArray 형식으로 serialize 한 후에 다시 deserialize 할 때 원본 데이터가 변형되는 것을 발견했습니다.

원본 데이터는 아래와 같습니다.

json

{

  "array": [1, 2, 3, 4, 5]

}



serialize 한 후의 데이터는 아래와 같습니다.

json

{

  "array": {

    "_bsontype": "PackedArray",

    "values": [1, 2, 3, 4, 5]

  }

}



이후 deserialize 한 데이터는 아래와 같습니다.

json

{

  "array": {

    "_bsontype": "PackedArray",

    "values": [1, 2, 3, 4, 5]

  }

}



다만, 원본 데이터와는 다르게 _bsontype이 "PackedArray"로만 나옵니다. 원본 데이터의 형식이 유지되지 않습니다.

이러한 현상을 어떻게 해결해야 하는지 알려주세요.

아래는 코드입니다.

cpp

#include 

#include 

#include 

#include 



int main() {

  bsoncxx::builder::basic::stream::document document;

  document << "array" << bsoncxx::builder::basic::document{} << bsoncxx::builder::basic::append_first(1) << bsoncxx::builder::basic::append_first(2) << bsoncxx::builder::basic::append_first(3) << bsoncxx::builder::basic::append_first(4) << bsoncxx::builder::basic::append_first(5);



  bsoncxx::document::view view = document.view();



  bsoncxx::document::raw_view serialized_doc = bsoncxx::document::serialize(view);



  bsoncxx::document::view_or_document deserialized_doc = bsoncxx::document::parse(serialized_doc.view());



  return 0;

}


    댓글목록

    profile_image
    나우호스팅  1일 전



    원본 데이터는 JSON 형식으로 array 필드에 정수 값이 들어 있습니다. serialize 메서드를 사용하여 PackedArray 형식으로 serialize 한 후 deserialize 할 때 원본 데이터가 변형되는 것을 발견했습니다.

    원본 데이터는 다음과 같습니다.

    #hostingforum.kr
    json
    
    {
    
      "array": [1, 2, 3, 4, 5]
    
    }
    
    


    serialize 한 후의 데이터는 다음과 같습니다.

    #hostingforum.kr
    json
    
    {
    
      "array": {
    
        "_bsontype": "PackedArray",
    
        "values": [1, 2, 3, 4, 5]
    
      }
    
    }
    
    


    이후 deserialize 한 데이터는 다음과 같습니다.

    #hostingforum.kr
    json
    
    {
    
      "array": {
    
        "_bsontype": "PackedArray",
    
        "values": [1, 2, 3, 4, 5]
    
      }
    
    }
    
    


    다만, 원본 데이터와는 다르게 _bsontype이 "PackedArray"로만 나옵니다. 원본 데이터의 형식이 유지되지 않습니다.

    이러한 현상을 해결하는 방법은 다음과 같습니다.

    1. PackedArray 형식으로 serialize 할 때, 원본 데이터의 형식도 함께 serialize 하도록 합니다.

    #hostingforum.kr
    cpp
    
    bsoncxx::document::raw_view serialized_doc = bsoncxx::document::serialize(view, bsoncxx::document::serialize_options{}.pack_array());
    
    


    이 코드는 serialize 메서드에 serialize_options 객체를 추가하여 pack_array() 메서드를 호출합니다. 이 메서드는 원본 데이터의 형식도 함께 serialize 하도록 합니다.

    2. deserialize 할 때, 원본 데이터의 형식도 함께 deserialize 하도록 합니다.

    #hostingforum.kr
    cpp
    
    bsoncxx::document::view_or_document deserialized_doc = bsoncxx::document::parse(serialized_doc.view(), bsoncxx::document::parse_options{}.pack_array());
    
    


    이 코드는 parse 메서드에 parse_options 객체를 추가하여 pack_array() 메서드를 호출합니다. 이 메서드는 원본 데이터의 형식도 함께 deserialize 하도록 합니다.

    위의 코드를 적용하면 원본 데이터의 형식이 유지되어 원본 데이터와 동일한 형식으로 deserialize 할 수 있습니다.

    2025-06-24 00:33

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 30,665건 / 13 페이지

검색

게시물 검색