簡體   English   中英

使用 Mongoose 更新包含唯一值的對象數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM