[英]Update an array of objects that contains a unique value using Mongoose
我在包含一組對象的集合中有文檔。 數組中的每個對象都包含一個唯一的字段“clinic_id”。 我也在使用貓鼬唯一驗證器。
我有一個 Node 路由,它接受一個 JSON 請求來將一個新對象推送到數組上。 但是,只要數組中有現有對象,這就會失敗。 我在已經存在的對象上得到一個唯一的約束錯誤。 例如,如果我在數組中有一個帶有 Clinic_id 1 的對象,並且我嘗試為 Clinic_id 2 添加一個對象,我將收到一個錯誤,抱怨 Clinic_id 1 已經存在。 它的行為就像我試圖創建一個重復的條目,而不僅僅是向數組添加一個新的非重復對象。
貓鼬模式的一個例子:
name: { type: String, required: true },
org_id: { type: String, unique: true, required: true },
branch: [{
name: { type: String, required: true },
clinic_id: { type: String, unique: true, required: true },
type: { type: String }
} ]
嘗試將新對象推送到數組的節點路由中包含的代碼示例:
const orgId = req.params.id;
Org.findOne({ org_id: orgId }).then(org => {
// Get org_id from URL and add to JSON body
req.body.org_id = orgId;
// Push Branch Object onto the array
org.branch.push(req.body);
org
.save()
.then(savedOrg => {
res.json({ status: 'SUCCESS', id: savedOrg._id });
})
.catch(err => {
const error = JSON.stringify(err);
res.status(500).json({ status: 'ERROR', desc: error });
});
});
mongoose-unique-validator 產生的錯誤文本:
{ ValidatorError: 錯誤,期望
clinic_id
是唯一的。 值:100
在新的 ValidatorError ...
附加信息:Node v10.15.1 / mongoose 5.2.1 / mongoose-unique-validator 2.0.2
您應該創建一個具有以下屬性的新模型:
{
name: { type: String, required: true },
clinic_id: { type: String, unique: true, required: true },
type: { type: String }
}
現在,它更容易了,因為您不需要獨立參考診所。 您可以在本文檔中添加 Org 的 id,但根據您的原始實現,我假設您不需要它。
當您去創建診所時,您只需將 id 添加到父文檔(Org)。
您組織中的字段將更改為:
branch: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Clinic'
}]
現在,無論何時創建分支,您只需將結果對象(您甚至不需要指定 _id,它會為您完成)推送到正確的組織中,您將擁有所需的列表。
當你想找到分支時:
Org.find(condition).populate('branch')
你會得到你想要的完全相同的結果。
現在,當我提到mongoose
,我的意思是如果你像這樣導入它:
const mongoose = require('mongoose');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.