亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么有兩個名為 _id 和 id 的屬性,而 mongoose 返回的對象中只有一個可見?

為什么有兩個名為 _id 和 id 的屬性,而 mongoose 返回的對象中只有一個可見?

牛魔王的故事 2023-09-28 10:00:04
當我使用 mongoose 在 MongoDB 中查詢后打印返回的對象時,我得到一個包含鍵之一作為“_id”的對象。但是,當我嘗試通過訪問對象來打印對象的屬性 id 和 _id 時,它不會說 id 未定義,而是打印與 _id 相同的 id。我附上下面的代碼和輸出的屏幕截圖。這是代碼片段const user = await User.findById(req.params.id);console.log(user);console.log(user.id, user._id);在下面的輸出中,我們可以看到 id 和 _id 包含相同的值,即使用戶對象中沒有可用的“id”屬性{  role: 'user',  _id: 5fc6cad25884d51790aad697,  name: 'Test 001',  email: '[email protected]',  __v: 0}5fc6cad25884d51790aad697 5fc6cad25884d51790aad697
查看完整描述

2 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

我想你最困惑的部分是id它來自哪里。這是文檔中的解釋:

Mongoose 默認為每個模式分配一個 id 虛擬 getter,它返回文檔的 _id 字段轉換為字符串,或者在 ObjectIds 的情況下,返回其十六進制字符串。如果您不希望將 id getter 添加到您的架構中,您可以通過在架構構建時傳遞此選項來禁用它。?const schema = new Schema({ name: String }, { id: false });

虛擬屬性是您可以獲取和設置但不會持久保存到 MongoDB 的文檔屬性。getter 對于格式化或組合字段很有用,而 setter 對于將單個值分解為多個值進行存儲非常有用。

查看完整回答
反對 回復 2023-09-28
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

檢查用戶對象是否存在某些與實例相關的問題,否則不會發生。



查看完整回答
反對 回復 2023-09-28
  • 2 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號