MongoDB - 在模型中连接两个属性并使用结果更新模型

时间:2018-03-12 02:06:34

标签: node.js mongodb express mongoose mongodb-query

我试图在这个模型中连接两件事。

router.post('/', (req, res) => {
let file= new File({
    name: req.body.name,
    year: req.body.year,
    code: req.body.code
});
file.save().then(data => {
    res.send(data);
}, err => {
    res.send(err);
})});

所以我想做的是我想从用户那里获取姓名和年份的输入,一旦帖子请求通过,我想取名+' _' +最后六个字符MongoDB对象ID并使用结果更新模型和补丁代码。我怎样才能以有效的方式实现这一目标?任何帮助,将不胜感激。谢谢!

示例文档

{ "_id": { "$oid": "5aa420c2f92b4d77fc342e62" }, "name": "n", "year": "1992", "code": "", "__v": 0 }

字段的示例输出"代码"来自上述文件。

  

"代码":" n_342e62"

代码应该通过连接这两个属性自己在post请求之后更新。

2 个答案:

答案 0 :(得分:1)

我不明白为什么在<{em> post请求完成后只想才能这样做。但是你可以这样做:

router.post('/', (req, res) => {
let file= new File({
    name: req.body.name,
    year: req.body.year,
    code: req.body.code
});
file.save().then(data => {
    res.send(data);

    //after the DATA has been sent, you can save the code
    let id = data._id.toString();
    data.code = data.name + "_" + id.slice(id.length - 6, id.length);
    data.save();
}, err => {
    res.send(err);
})});

(另请注明,您是否要将nameyear作为代码。

答案 1 :(得分:0)

试试这个,在保存数据之前生成mongo Id。

const mongoose = require('mongoose');
router.post('/', async (req, res) => {
  try {
    const body = req.body;
    let id = mongoose.Types.ObjectId();
    body._id = id;
    id = id.toString();
    let file = new File();
    data.code = `${data.name}_${id.substr(id.length - 6)}`;
    file = Object.assign(file, body);
    const data = await file.save();
    res.json(data);
  } catch (error) {
    res.send('Something went wrong');
  }
});