массив объектов не будет POST в mongodb - PullRequest
0 голосов
/ 30 января 2020

У меня есть массив объектов, который определен в схеме mon goose как

  blacklistGroup: {
    userId: { type: String },
    username: { type: String }
  }

Я не могу понять, почему он не будет POST в mongodb. У меня есть console.log, который показывает, что он представляет свою схему, но он никогда не появляется в mongodb? Что я делаю не так?

console.output

req.body.blacklistGroup
[ { userId: '5e2350c7f88cfb331c4f67de', username: 'artist1' },
  { userId: '5e20c5a139a92512cc7df63c', username: 'artist' } ]
[object Object]

app. js

app.post("/api/listings", checkAuth, (req, res, next) => {
  console.log("req.body.blacklistGroup");
  console.log(req.body.blacklistGroup);
  let blacklistGroup = req.body.blacklistGroup;
  console.log("req.body.blacklistGroup");

  const post = new Post({

    blacklistGroup: req.body.blacklistGroup,

  });

  //saves to database with mongoose
  post.save().then(result => {
    console.log(result);
    res.status(201).json({
      message: "Auction listing created successfully!",
      postId: result._id
    });
  });
});

Ответы [ 2 ]

1 голос
/ 30 января 2020

Вы можете хранить всех пользователей одновременно. используйте mon goose insertMany

const Post = require('post');  //mongoose schema

app.post("/api/listings", checkAuth,(req, res, next) => {
  console.log("req.body.blacklistGroup");
  console.log(req.body.blacklistGroup);
  let blacklistGroup = req.body.blacklistGroup;
  console.log("req.body.blacklistGroup");

  const blacklistGroup = req.body.blacklistGroup;

  (async function(){
    await Post.insertMany(blacklistGroup);
    res.status(200).send('Ok');
  })();
});

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

const Post = require('post');  //mongoose schema

app.post("/api/listings", checkAuth,async (req, res, next) => {
  console.log("req.body.blacklistGroup");
  console.log(req.body.blacklistGroup);
  let blacklistGroup = req.body.blacklistGroup;
  console.log("req.body.blacklistGroup");

  const blacklistGroup = req.body.blacklistGroup;

  await Post.insertMany(blacklistGroup);
  res.status(200).send('Ok');
});

Подробнее Здесь

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

У вас нет массива объектов (или, по крайней мере, вам он не нужен), у вас есть объект с двумя свойствами; userId и username. MongoDB ожидает JSON и похоже, что вы пытаетесь отправить ему массив, содержащий этот объект.

Попробуйте это:

let blacklistGroup = req.body.blacklistGroup[0];

Для обработки массива объектов, переданных как req.body.blacklistGroup, вам придется выполнить итерации по нему, определить новую запись для каждого объекта, а затем Отправь это. Я думаю, что часть путаницы здесь заключается в том, что ваша схема называется blacklistGroup, но она не относится к группе, она относится к одной записи.

const dbCalls = blacklistGroup.map(userObject => {
    const post = new Post({
        blacklistGroup: {
            userId: userObject.userId,
            username: userObject.username
    });

    return new Promise((resolve, reject) => {
        post.save.then(() => {
            resolve();
        })
        .catch(err => {
            reject(err);
        })
    })
});

Promise.all(dbCalls).then(() => {
    res.status(201).json({message: "Auction listings created successfully!"})
})
.catch(err => {
    res.status(500).json({error: err})
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...