我會避免使用多個集合來建模此場景,因爲MongoDB不支持連接,正如您所說的,您希望將級別1和級別2之間的引用綁定在一起。它聽起來像代表一個圖像的文檔將相當小並且很簡單 - 如果圖像具有很多顏色的可能性,則可能不適合在一個文檔中對圖像進行建模。所以我會去爲每個文檔建模一個圖像的一個集合。
聽起來你的圖像有兩個屬性,顏色和圖案。
一個簡單的模式,如果每個圖像只有1種顏色和1種模式是:
{
_id: ObjectId('...'),
name: "image1",
color: "green",
pattern: "solid"
}
一個模式,它允許每個圖像具有多種顏色和圖案應該是:
{
_id: ObjectId('...'),
name: "image1",
color: ["green", "red"],
pattern: ["plaid", "solid"]
}
你可以使用像這樣的查詢來查詢上述模式中的任一個:
db.images.find({ pattern:"solid", color: "green" });
使用Mongoose(用於Node的MongoDB對象建模庫),第一個模式看起來如下所示。請注意在應用程序代碼中使用enum
將這些字段限制爲有效值。
var imageSchema = new mongoose.Schema({
color: { type: String, enum: ['grey', 'blue', 'green', 'red'] },
pattern: { type: String, enum: ['solid', 'stripe', 'plaid'] },
name: String,
});
var Image = mongoose.model('image', imageSchema, 'images');
Image.find({ pattern:"solid", color: "green" }).exec(callback);
謝謝!這正是我正在尋找的 – cphill