2017-01-16 17 views
1

我有一個蒙戈集合,看起來像這樣:Mongoose如何自動將_id添加到集合項中的數組中的對象?

{ 
    name: string 
    _id: (auto set) 
    items: array[ 
     name: string 
     url: string 
     items: array[ 
      { 
       name: string, 
       url: string, 
       items: [] 
      } 
     ] 
    ] 
} 

我使用findByIdAndUpdate(帶貓鼬)將項目添加到項目數組:

Menu.findByIdAndUpdate(
    req.body.parentid, 
    { 
     $push: { 
      items: { 
       name: req.body.item.name, 
       url: req.body.item.url, 
       items: [] 
      } 
     } 
    }, 
    { 
     safe: true, 
     upsert: true, 
     new: true 
    }, 
    function(err, model) { 
     if (err !== null) { 
      console.log(err); 
     } 
    } 
); 

這工作得很好,但它不會將_id添加到插入到items陣列中的每個對象。我真的需要每個人的ID。

我猜它來自所用的方法findByIdAndUpdate,因爲它看起來更像是一個更新而不是插入。如果我的想法是正確的。

使用mongodb 3.2.10和mongoose 4.7.6。

任何幫助將非常感激。 謝謝。

編輯:_id: (auto set)是不真實的,它是通過mongo自動添加。但只是在頂層的對象。

+0

如果你設置了'setDefaultsOnInsert'選項,會發生什麼到'真的'? –

回答

0

你不需要在貓鼬模式中使用_id :(自動設置),它會自動爲每個文檔添加唯一的_id。

+0

我想,但是,當我通過mongo shell檢查時,我沒有看到任何'_id'被添加。只爲我寫'_id:(auto set)'的頂層對象。 – kevin

+0

這樣做的另一種方法 _id:{type:ObjectIdSchema,default:function(){return new ObjectId()}} –

+0

檢入一些其他GUI,如RoboMongo。在文檔中應該有一個唯一的ID,它可以是自動生成的ObjectId與'_id'鍵' –

相關問題