我在服务器上的PUT请求中运行了updateOne函数,尽管该函数没有返回错误,但显然找不到该记录。更新不会发生。
前提:我在http请求中收到一个id字段(不是_id)。 ID的格式为<name>-stage-###
。我想将id的值更改为不带-stage-###
部分的值。
因此,我现在有2个字符串:issueId包括“ stage”部分,而bowIssue不包括。
我删除了ID而没有检查的记录,即id = nudeIssue(如果存在,则将其删除,并且这部分工作正常)。
然后,我尝试使用id=issueId
更新记录的id字段,并将其更改为nudeIssue。这是行不通的。
其他无效的东西:
在"id"
或id字段周围添加或删除引号不会发生任何变化
将$ eq修饰符放在查询词组中不会发生任何变化
将我要搜索的ID更改为不存在的ID不会有任何改变,换句话说,如果我尝试updateOne({id:"BLABLABLAFOOBAR"}, {$set: {id:"NiceID"}})
,. 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")
}
});
我希望文档得到更新。不是。
答案 0 :(得分:0)
$ eq语法错误。尝试{ <field>: { $eq: <value> } }
答案 1 :(得分:0)
尝试一下-
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}}; */
const query = {id : {$eq: 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")
}
});
答案 2 :(得分:0)
感谢所有尝试提供帮助的人。 我的问题是这样的:我的架构不包含项目“ id”,并且它以严格模式运行。显然,在Robo 3T中,架构是由其他人更新的,但未在代码中进行更新。愚蠢的错误使我整日不得不思考并解决。不要让它发生在您身上:)
注意寻找答案的人:如果您有模型的变量,例如:
const issuesModel = db.model(ISSUES_COLLECTION_NAME, issueSchema, ISSUES_COLLECTION_NAME);
确保issueSchema
项包含您要更改的名称。