дети в схеме mon goose не будут сохранять увеличенные числа, но только один раз - PullRequest
1 голос
/ 01 мая 2020

У меня есть пользовательская схема, и я могу увеличивать число и сохранять в БД, но для дочерних элементов схемы в массиве я также могу увеличивать число, но оно не будет сохранено в БД.

 const userSchema = new Schema({
        inDex: {type: Number, default: 0},
        userName: {
            type: String,
            require: true,
            unique: true,
        },
        email: {
            type: String,
            lowercase: true,
            unique: false,
        },
        password: { type: String, required: true },
        mnemonic: {
            type: String,
            required: true,
        },
        profiles: [address: {index: {type: Number, default: 0}]
    })

    const User = mongoose.model('user', userSchema);

    async function processUserInput(req, res) {


        User.findById({ _id: userId}).then((doc)=> {
            doc.inDex = doc.inDex+1   // Will Increment and Save
            doc.profiles[0].address.index = 
            doc.profiles[0].address.index+1   //Will increment BUT WONT SAVE

            doc.save()
        }).catch(err => console.log('err', err))

    }

    router.post('/',  async (req, res) => {
      await processUserInput(req,res)

      res.status(200).json(some json data)
    })

1 Ответ

0 голосов
/ 01 мая 2020

Используемое вами выражение u.profiles[0].index + u.profiles[0].index + 1; не изменяет mon goose Экземпляр модели, поэтому doc.save() не будет запускать никаких обновлений в базе данных.

Вместо этого вы можете использовать

u.profiles[0].index = u.profiles[0].index + 1;

который запускает обновление ниже:

users.updateOne({ _id: ObjectId("..."), __v: 0 }, { '$set': { 'profiles.0.index': 1 } }, { session: undefined })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...