2016-12-03 80 views
0

需要在下面的json中爲貓鼬形成模式,「附加」對象也可以包含多個屬性。使用貓鼬的模式構建

{ 
"_id": "key", 
"status": "active", 
"additional": { 
    "First": { 
     "name": "First Name" 
    }, 
    "Last": { 
     "name": "Last Name" 
    } 
    } 
} 

我想出了以下內容,但希望「額外」是另一個架構(子文檔)。因爲我需要在子文檔上使用貓鼬驗證。

let schema = new Schema({ 
_id: { 
    type: String, 
    required: true 
}, 
status: { 
    type: String, 
    default: true 
}, 
additional: { 
    type: Object 
} 
}); 

回答

0

檢查:Embedded Objects in Mongoose

你的代碼看起來像這樣的事情:

var Name = new Schema({ 
    name  : String 
}); 

let schema = new Schema({ 
    _id: { 
     type: String, 
     required: true 
    }, 
    status: { 
     type: String, 
     default: true 
    }, 
    additional: { 
     First: Name, 
     Last: Name 
    } 
}); 

對於動態屬性,首先你需要存儲的名稱和類型,這些屬性在seprate表,例如NameProperty。那麼你的代碼將是這樣的:

var Name = new Schema({ 
    name  : String 
}); 

var props = db.NameProperty.find(); 
props.map(function(prop){ 
    Name[prop.name] = prop.type 
}) 

let schema = new Schema({ 
    _id: { 
     type: String, 
     required: true 
    }, 
    status: { 
     type: String, 
     default: true 
    }, 
    additional: { 
     First: Name, 
     Last: Name 
    } 
}); 
+0

,但額外的對象可以有任何財產,不能預先作出決定,同時確定schema.But這是肯定的,那財產將有「名」,在它 – Moniv

+0

,你可以把這些屬性在你的模式中!只要mongo爲空,mongo就不會存儲它們。 –

+0

另外,如果您的屬性是完全動態的,則可以將這些標籤存儲在其他集合中,加載該集合,然後從中創建該模式! –