簡體   English   中英

Mongoose 更新記錄數組中的嵌套 object

[英]Mongoose update nested object in array of record

我目前遇到一個問題,我正在嘗試更新 Mongoose 記錄中的嵌套數組。我的架構如下:

const customerSchema = new mongoose.Schema({
    kimCustomerId: {
      type: Number,
      required: true
    },      
    addresses: [
      {        
        created: Date,
        updated: Date,                     
        addressInfo: {
          type: { type: String },
          typeOfAddress: String,
          careOf: String,
          address: String,
          addressRow1: String,
          addressRow2: String,
          zipcode: String,
          city: String,
          countryCode: String,
          physicalAddressType: String,
          validFrom: Date,
          validTo: Date
        }
      }
    ],
.....

如您所見,每條記錄的地址數組包含許多地址。 我希望能夠通過更新 object 並更新在特定數組 object 內嵌套 object 的 addressInfo 內的屬性。 這是我的查詢:

const updated = await db.models.customers.findOneAndUpdate(
    {
      _id: customer._id,
      'addresses.addressId': addressData.addressId
    },
    { $set: { 'addresses.$': addressData } },
    { new: true }
  );

以及我通過以更新記錄的 object 的示例:

{
    addressId: officialAddressExists.addressId,
    addressInfo: {
      validTo: new Date().toISOString()
    }
 }

我想要發生的是,當我將此 object 傳遞給模式方法時,我想通過值“kimCustomerId”和“addressId”(我工作正常)為 select 提供正確的地址(我工作正常)然后只更新“addressInfo”的值' 已通過的嵌套 object 並保留未通過的那些,在本例中為 'validTo' 字段,但它可以是任意數量的更新。 它目前正在覆蓋整個“addressInfo”nestedObject,所以我認為我還必須對該嵌套的 object 進行某種設置操作,但我不確定如何操作。 有人能在這里指出我正確的方向嗎? 謝謝!

在查詢中沒有直接的方法可以執行此操作,您可以在客戶端執行此操作,例如,

 // Sample body request let addressData = { addressId: 1, addressInfo: { validTo: new Date().toISOString(), typeOfAddress: "Home", address: "ABC" } }; let set = {}; for (let key in addressData.addressInfo) { set["addresses.$.addressInfo." + key] = addressData.addressInfo[key]; } console.log(set);

set變量傳遞給您的查詢,

const updated = await db.models.customers.findOneAndUpdate(
    {
      _id: customer._id,
      'addresses.addressId': addressData.addressId
    },
    { $set: set },
    { new: true }
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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