【发布时间】:2019-09-20 00:28:59
【问题描述】:
我在服务器上的 PUT 请求中运行 updateOne 函数,显然该函数没有找到记录,尽管它没有返回错误。更新不会发生。
前提:我在 http 请求中得到一个 id 字段(不是 _id)。 id 的格式为<name>-stage-###。我想在没有-stage-### 部分的情况下将 id 的值更改为相同。
所以我现在有 2 个字符串:包含“阶段”部分的 issueId 和不包含的 bareIssue。
我删除而不检查 id = bareIssue 的记录(如果存在,则将其删除,这部分工作正常)。
然后我尝试用id=issueId更新记录的id字段,并将其更改为bareIssue。这不起作用。
其他不起作用的东西:
在
"id"或 id 字段周围添加或删除引号不会改变任何内容将 $eq 修饰符放在查询短语中不会改变任何内容
将我正在搜索的 id 更改为不存在的 id 不会改变任何内容,换句话说,如果我尝试
updateOne({id:"BLABLABLAFOOBAR"}, {$set: {id:"NiceID"}}),我仍然会在 updateOne 的 .then 子句中获得成功.向 updateOne 添加函数并检查错误永远不会出错。
尝试使用 mongo ID 代替字符串,因为 id 不起作用。
const dbConnection = mongoose.createConnection(DbServerLocation, options);
const db = dbConnection.useDb('issuesAndFiles');
const issuesModel = db.model(ISSUES_COLLECTION_NAME, reportSchema, ISSUES_COLLECTION_NAME); // In short - it is a model
router.put('/', (req, res, next) => {
let issueId = req.query['id'];
if (issueId) {
let bareIssue = issueId.substring(0, issueId.indexOf("-stage-"));
issuesModel.findOneAndRemove({id:bareIssue}).then(() => {
const query = {$eq: {id:issueId}};
const subst = {$set :{id:bareIssue}};
let retval = issuesModel.updateOne(query, subst)
.then(() => {
console.log("Put: success in updateOne");
res.status(200).send("Approved")
}
)
})
}
else {
res.status(404).send("Issue not specified")
}
});
我预计文档会更新。不是。
【问题讨论】:
-
const query = {id: issueId};不工作? -
不,它不起作用。我不知道为什么。这可能是一些愚蠢的事情,比如 .then 子句没有按时执行或类似的事情,因为据我所知,它应该起作用。
标签: javascript mongodb mongoose