Заполнить в узле js

#javascript #node.js #mongodb #mongoose

#javascript #node.js #mongodb #мангуст

Вопрос:

я новичок в Node.js и я пытаюсь использовать populate() , но у меня это не работает.

Я хочу user заполнить формы

Это модель

 const UserSchema = new Schema({
    firstName: {
        type: 'string',
        required: ' Firstname is Required'
    },
    lastName: {
        type: 'string',
        required: ' lastName is Required'
    },
    email: {
        type: 'string',
        required: ' email is Required'
    },
    phone: {
        type: 'string',

    },
    entrprise: {
        type: 'string'
    },
    password: {
        type: 'string',
        required: ' password is Required'
    },
    forms: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "Form"
    }

    ]
}) 

и это функция

 const getUser = async (req, res) => {
    try {
        const { userId } = req.params;
        if (!userId) return res.status(400).json({ message: "ERROR ID!" });
        const result = await User.findOne({ _id: userId })
            .populate('forms')
            .exec()
        return res.status(200).json({ message: "Success", result });
    } catch (err) {
        res.status(500).json({ message: "INTERNAL ERROR SERVER!" });
        console.log(err.message);
    }
}; 

но это то, что я получаю в результате

 "message": "Success",
"result": {
    **"forms": [],**
    "_id": "5fc917c49aca9b98b8d9b2aa",
    "firstName": "lea",
    "lastName": "bouteflika",
    "email": "inspirez@gmail.com",
    "password": "$2b$10$zJ5Du2YdfJBsz1ah6JYm7uPe1RYMwmmqmq68TxbvbwYnHVcDKNQeq",
    "phone": " 213556865069",
    "__v": 0
}
 

формы пусты, у кого-нибудь есть ответ?

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

1. Как выглядит пользователь в базе данных?

2. это пользователь в базе данных { forms: [], _id: 60290c2609fba7a4482cb3dd, имя пользователя: ‘lea’, Фамилия: ‘chaib’, адрес электронной почты: ‘leachaib@gmail.com ‘, пароль: ‘$2b $10$OHmzahuyiFXbqsFE6jWiiul7GOE41J.Rp4z7yA3hQaXG1dceELHw2’, телефон: ‘77890543321’, __v: 0 }

3. проверьте свою базу данных и проверьте коллекцию форм, действительно ли есть точное заклинание с формой или что-то еще, например, формы или формы? и напишите точное имя в вашей пользовательской схеме

4. я сделал это, но получил тот же результат, пустой массив, имя коллекции — forms

Ответ №1:

код о заполнении правильный, вы должны проверить id , forms field существует ли в From модели, потому что при вставке данных в коллекцию обновляется только одна коллекция

 const listOfIds = await User.findById(userId );
let result = await Form.find({_id: {$in:[listOfIds.forms]}}).lean()
console.log(result)
 

итак, найдите список идентификаторов в модели формы, если результат равен 0, поэтому проверьте запрос вставки;

и вы можете использовать finById вместо finOne

для вставки новой формы сделайте так

 //1
const form = new Form({
  title
 //....
});
//2
let user = await User.findById(userId); // find the user
//3
let newForm = await form.save(); // save new form
//4
user.forms.push(newForm); // push the new form into user for populate
//5
await user.save(); //update user
 

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

1. спасибо, я пытаюсь сделать это, но получаю пустой массив, пожалуйста, не могли бы вы сказать мне, что вы подразумеваете под запросом insert?

2. поместите запрос вставки при вставке форм в коллекцию

3. я действительно новичок в этой области, не могли бы вы привести мне пример, я не понял

4. если вы хотите вставить форму в коллекцию форм, после сохранения вы должны нажать на _id вставленную форму, в user forms поле, после этого вы можете использовать заполнить, как пять шагов в моем ответе

5. спасибо, но идентификатор не сработал, я получаю пустой массив