【发布时间】:2017-11-11 17:32:47
【问题描述】:
背景
问题是我想通过请求中传递的变量来访问对象的属性。发出 GET /modify/:var 请求以修改 MongoDB 中已保存文档的属性。要知道文档的哪个属性,在获取时转换为对象,我们要修改,我们需要在 :var 中传递的字符串。
路线
public modify(req: express.Request, res: express.Response, next: express.NextFunction)
{
Model.findOne({attr: true}, (err, result) => {
if (err) {
console.log(err);
}
else {
let copy = result;
copy.attr.one.(req.params.var) = false; // here
}
});
}
更新
在 Paul 的回答之后,我编辑了我的代码,它返回了 500 状态代码。我编辑了
router.put('/route/:var')
public mock(req: express.Request, res: express.Response, next: express.NextFunction) {
Model.findOne({attr: false}, (err, doc) => {
doc.attr[req.params.var] = false;
model.save((e) => {
if (e){
console.log(e);
}
res.send(doc);
});
});
模型结构
export interface Model extends mongoose.Document {
attr: {
one: {value: Boolean},
two: {value: Boolean},
three: {value: Boolean},
four: {value: Boolean},
};
}
【问题讨论】:
-
我不知道你想做什么。你能试着解释一下吗?
-
@Paul 发出 GET /modify/:var 请求以修改 MongoDB 中已保存文档的属性。要知道文档的哪个属性,在获取时转换为对象,我们想修改,我们需要在 :var 中传递的字符串。
-
我认为你还没有理解。您正在执行的 Model.findOne() 只会找到第一个将“attr”属性设置为 false 的文档(如果有的话)。如果 doc.attr 是一个布尔值(在您的示例中必须如此),那么您不能使用括号表示法来访问其上的任何内容,例如 doc.attr['some-string'],这将引发错误。跨度>
-
@Paul 根据给定的模型结构,是不是可以通过 doc.attr['one'].value 访问值?
-
有可能,如果 doc.attr 是一个对象。如果您能够通过查询
{ attr:false }找到该对象,则不是。
标签: node.js mongodb express typescript mongoose