2013-06-22 94 views
130

如果您有子文檔數組,Mongoose將自動爲每個數組創建id。例如:停止Mongoose爲子文檔數組項目創建_id屬性

{ 
    _id: "mainId" 
    subdocArray: [ 
     { 
     _id: "unwantedId", 
     field: "value" 
     }, 
     { 
     _id: "unwantedId", 
     field: "value" 
     } 
    ] 
} 

有沒有辦法告訴Mongoose不要爲數組中的對象創建id?

回答

164

這很簡單,你可以在子模式定義的:

var mongoose = require("mongoose"); 

var subSchema = mongoose.Schema({ 
    //your subschema content 
},{ _id : false }); 

var schema = mongoose.Schema({ 
    // schema content 
    subSchemaCollection : [subSchema] 
}); 

var model = mongoose.model('tablename', schema); 
+0

即使在subSchema集合中,或僅在subSchema被用作嵌入子文檔項目數組的情況下,這會忽略「_id」字段嗎?我特別要求這個,因爲我自己的[問題](http://stackoverflow.com/questions/38151433/mongoose-inserts-extra-id-in-array-of-objects-corresponding-to-related-entity)上SO今天。 –

+0

我使用兩層嵌套的子架構集合。換句話說,我有一個類似於你的例子的subSchema集合。在那裏,我使用另一個不同的子模式集合。我只想要第一級子模式模型實例不使用ids,但第二級(嵌套)子模式模型實例需要有ids。當我使用你的解決方案時,即指定'{_id:false}',這兩個級別的子模式都沒有id。任何方式來解決這個問題? –

+1

您是否嘗試過爲第三級設置「{_id:true}」? – throrin19

-3

在貓鼬3.0版現在你有另一種方式來創建子文件沒有父母 - 子女關係。並且這些子文檔將不會有索引

var mongoose = require("mongoose"); 

var schema = mongoose.Schema({ 
    // schema content 
subSchema: [{ 
    firstname: 'sub name', 
    lastname: 'last name' 
    }] 
}); 

var model = mongoose.model('tablename', schema); 
+1

我最後一次檢查,貓鼬也添加ID到這些子文檔。 –

+0

他們將id添加到子目錄 – wlingke

78

您可以創建沒有模式的子文檔並避免_id。只需將_id:false添加到您的子文檔聲明中即可。

var schema = new mongoose.Schema({ 
    field1:{type:String}, 
    subdocArray:[{ 
     _id:false, 
     field :{type:String} 
    }] 
}); 

這將阻止在您的subdoc中創建_id字段。在Mongoose中測試3.8.1

24

此外,如果您使用對象文本語法來指定子模式,您也可以直接添加_id: false來抑制它。

{ 
    sub: { 
     property1: String, 
     property2: String, 
     _id: false 
    } 
} 
11

我正在使用貓鼬4.6.3,我所要做的就是在模式中添加_id:false,不需要創建子模式。

{ 
    _id: ObjectId 
    subdocArray: [ 
     { 
     _id: false, 
     field: "String" 
     } 
    ] 
} 
+0

有沒有一種方法可以在整個集合中實現唯一性? – Saitama

+0

可能不是用這種方法,但你可以隨時嘗試。 '_id'是一個字段而不是約束。 – jemiloii

+0

如果在創建子文檔的時候,我明確指定了''_id = mongoose.Types.ObjectId()''',那麼這個_id在集合中是否是唯一的呢? – Saitama