Work command handler for an economy system
Why loop?

for x in posts.find({"guildid":f"{ctx.guild.id}","id":f"{ctx.author.id}"},{ "_id": 0,"job":1,"level":1}):
  level = int(x["level"])


You're looping over the result of posts.find to... convert an element to an integer and then throw it away? Are you sure that this is what you want to be doing?

If you care about level, your current code is overwriting it on every iteration, so you'll only get the last one.

Don't repeat yourself

for job_name, level_min, income in (
   ('Garbage Collector',  0,  50),
   (          'Cleaner',  7,  70),
   (       'Car Washer', 16, 105),
   (             'Maid', 27, 145),
   (     'Receptionist', 36, 185)
):
    if selection.lower() == job_name.lower() and level &gt;= level_min:
        data = {
           "id": f"{ctx.author.id}",
           "guildid": f"{ctx.guild.id}"
        }
        set_stuff = {
          "$set": {
              "job": job_name,
              "income": income
          }
        }
        posts.update_one(data, set_stuff)
        break
else:
    return await ctx.send(f"You are currently {level}, please go to school using ?learn")


If you want to get fancier, you can use a case-insensitive dictionary, but for this, that isn't strictly needed.