簡體   English   中英

如何根據請求更新 MongoDB 集合中的嵌套對象?

[英]How to update nested object in a MongoDB collection based on the request?

我有下面給出的用戶集合

{
  "_id": 1
  "firstname": "John"
  "lastname": "Doe"
  "address": {
    "street": "13",
    "city": "Los Angeles",
    "state": "California",
    "country": "USA",
    "pincode": "12345"
  }
}

我想制作一個可以更新用戶數據的 API。

這是我嘗試過的:

第一種方法

使用此方法將從集合中刪除請求中不存在的某些字段。

詢問:

const updateUser = (userId, data) => {
    return UserDB.updateOne({ _id: userId }, {
        $set: {...data }
    });
};

要求:

{
  "_id": 1
  "firstname": "Justin"
  "lastname": "Thomas"
  "address": {
    "country": "Canada",
    "pincode": "9999"
  }
}

結果:

// street, city and state is removed from collection
{
  "_id": 1
  "firstname": "Justin"
  "lastname": "Thomas"
  "address": {
    "country": "Canada",
    "pincode": "9999"
  }
}

第二種方法:

使用此方法,將請求中不存在的字段設置為空。

詢問:

const updateUser = (userId, data) => {
    return UserDB.updateOne({ _id: userId }, {
        $set: {
            "firstname": data.firstname,
            "lastname": data.lastname,
            "address.street": data.address.street,
            "address.city": data.address.city,
            "address.state": data.address.state,
            "address.country": data.address.country,
            "address.pincode": data.address.pincode
        }
    });
};

要求:

{
  "_id": 1
  "firstname": "Justin"
  "lastname": "Thomas"
  "address": {
    "country": "Canada",
    "pincode": "9999"
  }
}

結果:

// street, city and state is set to null in the collection.
{
  "_id": 1
  "firstname": "Justin"
  "lastname": "Thomas"
  "address": {
    "street": null,
    "city": null,
    "state": null,
    "country": "Canada",
    "pincode": "9999"
  }
}

問題

如何更新集合中的嵌套對象?

第二種方法是運行良好的操場,請檢查您的數據。

暫無
暫無

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

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