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

Posted

技术标签:

【中文标题】MongoDB - 连接模型中的两个属性并使用结果更新模型【英文标题】:MongoDB - Concatenating two properties in a model and updating the model with the result 【发布时间】:2018-08-19 23:59:08 【问题描述】:

我试图在这个模型中连接两个东西。

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”

代码应该在发布请求后通过连接这两个属性自行更新。

【问题讨论】:

显示示例文档 "_id": "$oid": "5aa420c2f92b4d77fc342e62" , "name": "n", "year": "1992", "code": "", "__v" : 0 您要查找的示例输入/输出是什么? "_id": "$oid": "5aa420c2f92b4d77fc342e62" , "name": "n", "year": "1992", "code": "n_342e62", "__v ": 0 代码应该在发布请求后通过连接这两个属性自行更新。 出于好奇,创建此代码有什么用?也没有“触发器”功能可以在插入时自动更新此字段。 【参考方案1】:

我不明白你为什么要在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);
));

(另外,请说明您是要使用name 还是year 作为代码)。

【讨论】:

【参考方案2】:

试试这个,在保存数据之前生成 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');
  
);

【讨论】:

以上是关于MongoDB - 连接模型中的两个属性并使用结果更新模型的主要内容,如果未能解决你的问题,请参考以下文章

Python 连接MongoDB并比较两个字符串相似度的简单示例

MongoDb findOne 结果属性未定义

怎么在java中获得mongodb分组group的结果中的总数量

使用 LINQ 获取两个比较列表的结果并根据结果更改列表中的属性

如何在两个集合之间建立查找连接

如何在 Laravel 中连接两个属性后将值搜索到数据库中