text: Title: [BUG] Beanie projection and Pydantic Schema do not play well together
  Body: **Describe the bug**
  Beanie projections are expecting an "_id" field, but Pydantic schema expect "id". This makes it impossible to use the same Schema and create duplicated code (unless I’m missing the proper method to do it)
  
  **To Reproduce**
  ```python
  from motor.motor_asyncio import AsyncIOMotorClient
  from pydantic import BaseModel, Field
  
  from beanie import Document, init_beanie, PydanticObjectId
  
  class Author(Document, BaseModel):
      name: str
  
  class AuthorRead(BaseModel):
      id: PydanticObjectId = Field(alias="id")
      name: str
  
  class AuthorProjection(BaseModel):
      # note the underscore
      id: PydanticObjectId = Field(alias="_id")
      name: str
  
  async def example():
      client = AsyncIOMotorClient("mongodb://localhost:27017")
      await init_beanie(database=client.db_name, document_models=[Author])
  
      dict = { "name": "Joe" }
      joe = Author(**dict)
      await joe.insert()
  
      # created object contains "id"
      print(AuthorRead(**joe.dict()))
  
      # Beanie get, also give us an 'id' field, so AuthorRead expect id too
      # (get() method does not have a project() method)
      result = await Author.get(joe.id)
      print(AuthorRead(**joe.dict()))
  
      # projection is expecting "_id", not "id"
      # we cannot use the same Schema!
      result = await Author.find_all().project(AuthorProjection).to_list()
      print(result)
  
  await example()
  ```
  
  **Expected behavior**
  A way to use the same Schema for projections, like mapping _id to id during projection
  