Как сделать sh объект {key: value} в моем массиве MongoDB? - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь обновить свои объекты User, помещая сообщение в массив, который я для него создал. Я пытался сделать это несколькими разными способами, но пока ничего не работало и не обновляло пользовательский объект. Я новичок в MongoDB, но пока мне это очень нравится и я рад использовать его больше. Что я делаю не так?

//Home page
router.get('/home', ensureAuthenticated, (req, res) => res.render('home', {user_mv: req.user}));

//Create topic page
router.get('/create-topic', ensureAuthenticated, (req, res) => res.render('create-topic', {user_mv: req.user}));

//Post handle
router.post('/create-topic', (req, res) => {
     User.update( {_id: req.body.user_id},
        {
            $push: {
                postArr: {
                    title: req.body.title,
                    category: req.body.category,
                    vista: req.body.vista,
                    description: req.body.description
                }
            }   
        });
    res.send(req.body.user_id);      
});
const DBmusevistaSchema = mongoose.Schema({
    firstname: {
        type: String,
        required: false
    },
    lastname: {
        type: String,
        required: false
    },
    username: {
        type: String,
        required: false
    },
    email: {
        type: String,
        required: false
    },
    password: {
        type: String,
        required: false
    },
    date: {
        type: Date,
        default: Date.now
    },
    postArr: [
        {
            title: {
                type: String,
                required: false
            },
            category: {
                type: String,
                required: false
            },
            vista: {
                type: String,
                required: false
            },
            description: {
                type: String,
                required: false
            }
        }
    ]
});
<input type="hidden" class="form-control" name="user_id" value="<%= user_mv._id %>">

1 Ответ

0 голосов
/ 19 января 2020

Ваш синтаксис Update в порядке.

req.body.user_id поставляется в виде строки (при условии, что вы не используете какое-либо специальное c промежуточное программное обеспечение для его повторного приведения).

Все Вы должны сделать приведение к типу ObjectId. вот так:

var ObjectID = require('mongodb').ObjectID

А потом:

{_id: new ObjectId(req.body.user_id)}

РЕДАКТИРОВАТЬ:

Попробуйте и дождитесь возврата обещания от update, все равно должно работать без ожидания для этого, но не видя весь код, я не могу быть уверен.

Сделайте это:

//Post handle
router.post('/create-topic', async (req, res) => {
     let updateResult = await User.update( {_id:  mongoose.Types.ObjectId(req.body.user_id)},
        {
            $push: {
                postArr: {
                    title: req.body.title,
                    category: req.body.category,
                    vista: req.body.vista,
                    description: req.body.description
                }
            }   
        });
    res.send(req.body.user_id);      
});

Также я вижу, что вы используете mon goose, поэтому вы вместо установки Mon API go, который вы можете использовать:

var mongoose = require('mongoose')

А затем:

{_id: new mongoose.Types.ObjectId(req.body.user_id)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...