'findOneAndUpdate is not a function of mongoose

I know this question has been answered before but I can't seem to implement the changes into what im working with. I'm trying to create a daily command that rewards a user for doing s!daily. I get the error,

TypeError: profileData.findOneAndUpdate is not a function

at Object.execute (C:\Users--\Desktop\DiscBot\commands\daily.js:35:43)

at module.exports (C:\Users--\Desktop\DiscBot\events\client\message.js:34:13)

daily.js, one having error at line 35 for findOneAndUpdate is not a function

const Schema = require('../models/profileSchema')
//cache users that claim daily rewards
let claimedCache = []

const clearCache = () => {
  claimedCache = []
  setTimeout(clearCache, 1000 * 60 * 10)
}
clearCache()
//message to make it easier later
const alreadyClaimed = 'You have already claimed your daily rewards'

module.exports = {
    name: "daily",
    aliases: ["day", "d"],
    permissions: [],
    description: "Claim your daily rewards!",
    async execute(message, args, cmd, client, Discord, profileData) {

    const { serverID, member } = message
    const { id } = member
//If user is in cache return message
    if (claimedCache.includes(id)) {
      console.log('Returning from cache')
      message.reply(alreadyClaimed)
      return
    }
//Put everything in object for later
    const obj = {
      guildId: serverID,
      userId: id,
    }
//Results is an update that either updates if is user is not in array and doesn't if they are, but it doesn't know what findOneAndUpdate is (thought it was just a mongo/mongoose function??)
      try {
        const results = await profileData.findOneAndUpdate(obj)

        console.log('RESULTS:', results)

        if (results) {
          const then = new Date(results.updatedAt).getTime()
          const now = new Date().getTime()

          const diffTime = Math.abs(now - then)
          const diffDays = Math.round(diffTime / (1000 * 60 * 60 * 24))

          if (diffDays <= 1) {
            claimedCache.push(id)

            message.reply(alreadyClaimed)
            return
          }
        }
//after the update increase coins by 50 and send claimed message
        await profileRewardsSchema.findOneAndUpdate(obj, obj, {
          upsert: true,
        })

        claimedCache.push(id)
        const amount = 50;
        await profileModel.findOneAndUpdate(
            {
              userID: id,
            },
            {
              $inc: {
                coins: amount,
              },
            }
          );
        message.reply('You have claimed your daily rewards!')
      }catch (err) {
        console.log(err);
      }
    }
}

message.js, heres where I make profileModel a thing using mongoose to pass it into my commands

const profileModel = require("../../models/profileSchema");
const config = require('../../config.json');

module.exports = async (Discord, client, message) => {
    //command handler start

    const prefix = 's!';
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    //database junk
    let profileData;
    try {
      profileData = await profileModel.findOne({ userID: message.author.id });
      if (!profileData) {
        let profile = await profileModel.create({
          userID: message.author.id,
          serverID: message.guild.id,
          coins: 10,
          bank: 0,
        });
        profile.save();
      }
    } catch (err) {
      console.log("Error creating new database profile");
    }
    
    const args = message.content.slice(prefix.length).split(/ +/);
    const cmd = args.shift().toLowerCase();
  
    const command = client.commands.get(cmd)  || client.commands.find(a => a.aliases && a.aliases.includes(cmd));
   
    if(!command) return message.channel.send(":x: This is not a valid command");
    try {
    command.execute(message, args, cmd, client, Discord, profileData);
    } catch (err) {
      message.reply('There was an error executing that command!');
    }
};

profileSchema.js, Where profile is made into mongo database

const mongoose = require("mongoose");

const profileSchema = new mongoose.Schema({
  userID: { type: String, require: true, unique: true },
  serverID: { type: String, require: true },
  coins: { type: Number, default: 10 },
  bank: { type: Number },
},
  {
    timestamps: true,
  }
)
const model = mongoose.model("ProfileModels", profileSchema);
module.exports = model;

main.js, where mongoose is connected, then passed on

mongoose.connect(process.env.MONGODB_SRV, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useFindAndModify: false
})


Solution 1:[1]

You are trying to call findOneAndUpdate on the document, which you passed to execute function at message.js. Check the example of how to use findOneAndUpdate

https://mongoosejs.com/docs/tutorials/findoneandupdate.html

Solution 2:[2]

I guess findOneAndUpdate takes two relevant parameters (filter): the data to be updated, and the payload.

Check mongoosedocs for more info.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nikita Mazur
Solution 2 Ogwuru Patrick