2017-05-08 3 views
0

_idデフォルトばかりのカスタムプロパティを期待してオブジェクトの配列で、私は次のようなスキーマを持っている:マングース:IDという名前だけでなく、

const userSchema = mongoose.Schema({ 
    // Other properties here 

    userMaterials: [{ title: String, category: String, id: String }] 
}); 

ユーザーは材料を公開する必要があり、それぞれの材料がuserMaterial配列に追加されます。

材料はオブジェクトであり、次のようになります。

let material = { 
    id: dbMaterial.id.toString(), 
    title: dbMaterial.title, 
    category: req.body.category 
}; 

回保存した後、同じ材料のオブジェクトを(ちょうど何が起こるかテストするため)、私はデシベルで見つけたもの、追加_idです。

userMaterials: 
    [ { _id: 59105a5810400d7cde1d8e50, 
     category: 'want-to-watch', 
     title: 'jQuery Fundamentals', 
     id: 590f7826f55f2e2814d113f8 }, 
    { _id: 59105df83369cd7fa49c9ac1, 
     category: 'want-to-watch', 
     title: 'jQuery Fundamentals', 
     id: 590f7826f55f2e2814d113f8 } ] 

スキーマがuserMaterialsに変更されたとき、私はところで...、配列内のオブジェクトに子スキーマか何かではありません余分_idフィールドことを期待していなかった:[]それはすべての罰金と私私が実際に期待しているもの、つまり配列にプッシュされた変更されていないマテリアルオブジェクトを取得します。

これで、mongooseが_idフィールドを作成する理由を説明できますか?

答えて

0

私の知る限り、サブ文書のクエリには_idが追加されています。アレイ内で_idの自動作成を無効にする場合は、_id: falseを追加できます。更新されたスキーマは次のようになります。

const userSchema = mongoose.Schema({ 
    // Other properties here 

    userMaterials: [{ title: String, category: String, id: String, _id: false }] 
}); 

_idあなたが詳細をお知りになりたい場合はdocumentationを参照してください。

関連する問題