【问题标题】:array of objects won't POST into mongodb对象数组不会 POST 到 mongodb
【发布时间】:2020-05-15 13:32:05
【问题描述】:

我有一个对象数组,在 mongoose 模式中定义为

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

我不明白为什么它不会 POST 到 mongodb。 我有一个 console.log 显示它代表它的模式,但它从未出现在 mongodb 中?我做错了什么?

控制台输出

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
    });
  });
});

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以一次存储所有用户。使用猫鼬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');
    });
    

    更多Here

    【讨论】:

      【解决方案2】:

      你没有一个对象数组(或者至少你不想要一个),你有一个具有两个属性的对象; userIdusername。 MongoDB 期待 JSON,看起来您正试图向它发送一个包含该对象的数组。

      试试这个:

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

      要处理作为req.body.blacklistGroup 传递的对象数组,您必须对其进行迭代,为每个对象定义一个新的 Post,然后发送它。我认为这里的部分混淆是您的架构称为 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})
      });
      

      【讨论】:

      • 更新问题以反映多个用户
      • 不太清楚您对 [object Object] 与 [object String] 的含义,但已更新我的答案,希望对您有所帮助!
      • 我现在将它转换为 [object String]。我说的是对象的数据类型。
      • 上面写着blacklistGroup.forEach is not a function
      • 糟糕,我认为应该是blacklistGroup.map - 确保您仍在使用 blacklistGroup 作为数组。我还在答案中解构了 userObject,这可能会修复数据类型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 2021-10-25
      • 2021-07-29
      相关资源
      最近更新 更多