MongoDB populate () для динамической загрузки / переноса данных не работает - PullRequest
0 голосов
/ 18 июня 2020

Я создаю приложение, в котором пользователь добавляет и удаляет объекты (Pi c) в массиве ('pics') после регистрации, но не знаю, как динамически загружать или заполнять ('pics') в userSchema, чтобы автоматический рендеринг. Пользователь регистрируется в приложении с изначально пустым массивом ('pics' = zero) и после этого создает или удаляет эти объекты при входе в систему. Следуя документации, я использовал «await User.find (). Populate ('pics' ); " для переноса данных в метод индексации, но не сработало.
Кроме того, должен ли я включать ключ 'pics' в метод хранилища, или userSchema 'pics' должно быть достаточно?

const userSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true,
            trim: true
        },
        pics: [
            {                                        
            type: mongoose.Schema.Types.ObjectId,       
            ref: "Pic"
        }
        ],
    });


const picSchema = new mongoose.Schema({
    thumbnail: String,
    description: String,
    dev: {                                        
        type: mongoose.Schema.Types.ObjectId,       
        ref: 'User'
    },        
 },
);
const User = mongoose.model('User', userSchema);
const Pic = mongoose.model('Pic', picSchema)

async index(req, res, next) {
    const users = await User.find().populate('pics');
    res.status(200).json(
     devs
    );
   },

async store(req, res) {     
   try {     
    const { name } = req.body;       
         let user = await User.create({
            name,            
            pics
        })
        // await user.populate('pics').execPopulate();
        res.send({ user })            
    }  
    } catch (error) {
        res.status(400).send(error);
    }             
}, 

1 Ответ

0 голосов
/ 19 июня 2020

Я работал go с MongoDB и NodeJS. Я думаю, что у вас проблемы с определениями. Также вы можете прочитать документацию. https://mongoosejs.com/docs/populate.html

Вам необходимо определить _id для коллекций (Схема).

const userSchema = new mongoose.Schema({
        _id: new mongoose.Types.ObjectId(),
        name: {
            type: String,
            required: true,
            trim: true
        },
        pics: [
            {                                        
            type: mongoose.Schema.Types.ObjectId,       
            ref: "Pic"
        }
        ],
    });


const picSchema = new mongoose.Schema({
    _id: new mongoose.Types.ObjectId(),
    thumbnail: String,
    description: String,
    dev: {                                        
        type: mongoose.Schema.Types.ObjectId,       
        ref: 'User'
    },        
 },
);

Итак, когда вы создаете новый Пользователь, _id заполнен (вы можете его сгенерировать или он может быть сгенерирован автоматически) и игнорируйте изображения поля. Когда вы создаете Pi c, вам нужно прочитать _id пользователя и назначить его как 'dev', что-то вроде:

let pic = new Pic({
    thumbnail: '', description: '',
    dev: yourUser._id
  });

Используя этот способ создания документов, вы можете использовать функцию заполнения .

...