According to BSON specification an int32_t is used for the total number of bytes comprising the document.
I can also see that mongo-c-driver is using Libbson and it's using int32_t.
But what is the reason to use signed integer instead of unsigned integer?
the document size will never be below 0. Can someone please explain the reason?
Document size is limited to 16 MB, which fits in a signed 32-bit integer with room to spare.
While document size limits larger than 16 MB were considered, my guess is there was no serious consideration of document sizes exceeding 2 GB, therefore the difference in range afforded by using unsigned 32-bit integers for length wasn't a meaningful benefit.
Thus, there is no reason to use an unsigned type.
Reasons to NOT use an unsigned type: