Как мне обновить объект внутри массива внутри другого объекта с помощью mongoose

#javascript #node.js #mongodb #mongoose #discord.js

#javascript #node.js #mongodb #mongoose #discord.js

Вопрос:

У меня следующая структура

 {
   "serverId": serverId,
   "name": serverName,
   "members":[
      {
         "birthday":{
            "$date":{
               "$numberLong":birthDate
            }
         },
         "user": userName,
      },
      {
         "birthday":{
            "$date":{
               "$numberLong":birthDate2
            }
         },
         "user": userName2,
      }
   ]
   }
}
  

Я не уверен, как использовать Mongoose для обновления дня рождения одного из участников.

У меня есть две модели для объектов, которые я сохраняю:

 const { Schema, model } = require('mongoose')

const memberSchema = Schema({
    birthday: {
        default: '',
        type: Date,
    },
    user: {
        default: '',
        type: String,
    },
})

module.exports = model('Member', memberSchema, 'memberTest')
  
 const mongoose = require('mongoose')

const serverSchema = mongoose.Schema({
    serverId: {
        default: '1',
        type: String,
    },
    name: {
        default: 'emptyServer',
        type: String,
    },
    members: [],
})

module.exports = mongoose.model('Server', serverSchema, 'servers')
  

Я пытался сделать это:

 
        const newBirthday = new Member({
            user: message.author.tag,
            birthday: date
        })
        let dbMember = dbServer.members.filter(member => member.user = message.author.tag)

        if(dbMember){
            dbServer.update({'members.user': message.author.tag}, {'$set': {
                'members.$.user': message.author.tag,
                'members.$.birthday': date
            }})
        }else{
            dbServer.members.push(newBirthday)
        }

        dbServer.save()
  

но он не обновляет элементы в БД.

После того, как я протестировал это, я смог увидеть обновление объекта (зарегистрировав его), но когда я заглядываю в de DB, изменений там нет. Я не совсем уверен, действительно ли то, что я делаю, не соответствует действительности

Комментарии:

1. Я не уверен, но посмотрите, можете ли вы просто напрямую обновить сам элемент: const member = dbServer.members.find(m => m.user === message.author.tag); member.birthday = date; member.save()

2. Нет, у члена нет функции сохранения ()

3. Если вы измените свою схему, как в приведенном здесь примере, я думаю, тогда это может сработать. В этом случае members: [] это будет массив ссылок на Member экземпляры.