개발자 Q&A

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

2025.07.12 12:25

MongoDBDriverServerApi::bsonSerialize 문제점

목록
  • DNS마스터 17시간 전 2025.07.12 12:25 새글
  • 7
    1
제가 MongoDBDriverServerApi::bsonSerialize를 사용하여 데이터를 serialize하는 과정에서 발생하는 문제점을 질문드립니다.

제가 사용하는 코드는 다음과 같습니다.
php

$document = [

    '_id' => new MongoDBBSONObjectId(),

    'name' => 'John Doe',

    'age' => 30

];



$mongoClient = new MongoDBClient('mongodb://localhost:27017');

$db = $mongoClient->selectDatabase('mydatabase');

$collection = $db->selectCollection('mycollection');



$serverApi = $collection->getServerApi();

$serverApi->bsonSerialize($document);



이 코드는 에러없이 실행되지만, serialize된 데이터를 확인하려고 할 때 문제점이 발생합니다. serialize된 데이터의 형식이 예상과 다르게 나타납니다.

serialize된 데이터는 다음과 같이 나타납니다.
json

{

    "_id": {

        "$oid": "..."

    },

    "name": "John Doe",

    "age": 30

}



위 데이터의 형식은 MongoDB의 ObjectId를 serialize할 때 사용하는 형식과 다릅니다. MongoDB의 ObjectId는 다음과 같이 serialize됩니다.
json

{

    "_id": {

        "$oid": "..."

    }

}



위 형식과는 다르게, serialize된 데이터의 "_id" field에 "name"이 추가되어 있습니다.

이 문제점을 해결할 수 있는 방법을 알려주시기를 부탁드립니다.

    댓글목록

    profile_image
    나우호스팅  17시간 전



    이 문제는 MongoDBDriverServerApi::bsonSerialize를 사용할 때 발생하는 문제입니다.

    일단, MongoDB의 ObjectId를 serialize할 때 사용하는 형식은 다음과 같습니다.

    #hostingforum.kr
    json
    
    {
    
        "_id": {
    
            "$oid": "..."
    
        }
    
    }
    
    


    이와 같이 serialize된 데이터를 얻기 위해서는 MongoDBDriverServerApi::bsonSerialize를 사용할 때 옵션을 설정해야 합니다.

    #hostingforum.kr
    php
    
    $serverApi->bsonSerialize($document, ['root' => '_id']);
    
    


    이 옵션을 사용하면 serialize된 데이터의 "_id" field에 "name"이 추가되지 않습니다.

    또한, MongoDBDriverServerApi::bsonSerialize를 사용할 때는 MongoDB의 ObjectId를 serialize할 때 사용하는 형식에 맞게 serialize된 데이터를 얻을 수 있습니다.

    #hostingforum.kr
    json
    
    {
    
        "_id": {
    
            "$oid": "..."
    
        }
    
    }
    
    


    이와 같이 serialize된 데이터를 얻기 위해서는 MongoDBDriverServerApi::bsonSerialize를 사용할 때 옵션을 설정해야 합니다.

    #hostingforum.kr
    php
    
    $serverApi->bsonSerialize($document, ['root' => '_id', 'typeMap' => ['root' => 'document']]);
    
    


    이 옵션을 사용하면 serialize된 데이터의 "_id" field에 "name"이 추가되지 않습니다.

    또한, MongoDBDriverServerApi::bsonSerialize를 사용할 때는 MongoDB의 ObjectId를 serialize할 때 사용하는 형식에 맞게 serialize된 데이터를 얻을 수 있습니다.

    #hostingforum.kr
    json
    
    {
    
        "_id": {
    
            "$oid": "..."
    
        }
    
    }
    
    


    이와 같이 serialize된 데이터를 얻기 위해서는 MongoDBDriverServerApi::bsonSerialize를 사용할 때 옵션을 설정해야 합니다.

    #hostingforum.kr
    php
    
    $serverApi->bsonSerialize($document, ['root' => '_id', 'typeMap' => ['root' => 'document'], 'serializeFunctions' => ['ObjectId' => 'MongoDB\BSON\ObjectId']]);
    
    


    이 옵션을 사용하면 serialize된 데이터의 "_id" field에 "name"이 추가되지 않습니다.

    이러한 옵션을 사용하면 MongoDBDriverServerApi::bsonSerialize를 사용할 때 발생하는 문제점을 해결할 수 있습니다.

    2025-07-12 12:26

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

검색

게시물 검색