在 Express 中推送到数组时插入参考文档
Posted
技术标签:
【中文标题】在 Express 中推送到数组时插入参考文档【英文标题】:Upsert ref documents when pushing to array in Express 【发布时间】:2019-10-08 07:26:29 【问题描述】:我有一个 Candidate
架构,其中包含一个 Endorser
架构的引用数组。像这样:
const CandidateSchema = new mongoose.Schema(
name:
type: String,
required: true,
trim: true
,
endorsements: [
type: mongoose.Schema.Types.ObjectId,
ref: 'Endorser'
]
);
const EndorserSchema = new mongoose.Schema(
name:
type: String,
required: true,
trim: true
,
);
我以字符串数组的形式收到endorsements
(即背书人的姓名)。我想遍历该数组并从Endorser
模型中检索每个数组的_id
,或者如果它不存在则插入一个新的。然后我想将这些引用推送到现有的 candidate
实例上。
以下代码有效,但我真的不喜欢修改内存中的 candidate
实例。必须单独进行承诺解决似乎也很奇怪。
const endorsementPromises = endorsements.map(async endorser =>
let endorserObj = await Endorser.findOneAndUpdate(name: endorser, name: endorser, upsert: true, new: true);
return endorserObj._id;
);
const endorsementArray = await Promise.all(endorsementPromises);
candidate.endorsements = candidate.endorsements.concat(endorsementArray);
await candidate.save();
我尝试过将findOneAndUpdate
与$push
和$each
一起使用。但是,这只会返回错误并且不会更新文档。
Candidate.update(
id: candidate._id,
$push:
endorsements:
$each: endorsementArray
);
// the error
Error: "n":0,"nModified":0,"ok":1
我不确定为什么 $push
和 $each
不更新文档。
非常感谢任何指导。
【问题讨论】:
【参考方案1】:尝试使用$addToSet
而不是$push
。此外,您似乎应该在更新中匹配 _id
而不是 id
。
【讨论】:
返回同样的错误并且不更新数据库。 您的查询中可能有错字。在您的update
中,您是否应该匹配_id
而不是id
?
哎呀!而已!现在我觉得自己很笨。
哈哈,通常都是些小事,很高兴能帮上忙!以上是关于在 Express 中推送到数组时插入参考文档的主要内容,如果未能解决你的问题,请参考以下文章