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并比较两个字符串相似度的简单示例
怎么在java中获得mongodb分组group的结果中的总数量