Mongoose + Mongodb User.update не работает - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь создать новую коллекцию и поместить эту коллекцию в определенный массив User.collections. Я прочитал много сообщений stackoverflow, и все они говорят, чтобы использовать либо User.update () или User.findOneAndUpdate (). Мне тоже не повезло. Я могу создать коллекцию, и она будет сохранена в Монго, так что я знаю, что у меня действительно есть доступ к БД. Вот мой код, если кто-то из вас может помочь, я был бы признателен.

Схема пользователя

const mongoose = require('mongoose');
const { Schema } = mongoose;

const userSchema = new Schema({

    googleID: String,
    givenName: String,
    familyName: String,
    collections: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "collection"
        }
    ]
});

mongoose.model('users', userSchema);

Схема сбора:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const collectionSchema = new Schema({
    type: String,
    name: String,
    gamesCollected: [
        {
            id: Number
        }
    ]
});

mongoose.model('collection', collectionSchema);

И мой маршрут:

router.get('/get_collection', (req, res) => {    
    const collection = new Collection({
        type: 'SNES',
        name: 'First SNES Collection',
        gamesCollected: [{ id: 5353 }]
    }).save();

    User.update({googleID: req.user.googleID}, {$push: {collections: collection}});
});

1 Ответ

0 голосов
/ 05 ноября 2018

Сохранить - это не синхронная операция, а асинхронная, поэтому вам нужно использовать обещание , оно возвращает и обрабатывает его, а после его завершения обновляет пользователя модель. Что-то из этих строк:

router.get('/get_collection', async (req, res) => {
    let collection = new Collection({
        type: 'SNES',
        name: 'First SNES Collection',
        gamesCollected: [{ id: 5353 }]
    })
    await collection.save().exec();
    await User.update(
     {googleID: req.user.googleID}, 
     {$push: {collections: collection._id}}
    ).exec();
});
...