2017-01-17 3 views
0

Ich versuche, eine E-Commerce-Website auf Node.js mit einer mongoDB Datenbank basiert zu bauen, und ich habe Probleme über einige Datenbank-Design oder eine Logik begegnet mir fehltMongoDB Datenbank-Design für Produkte und Pakete

Zusammengefasst up, ich habe Product, die Preis, Name, Beschreibung etc ... und Bundle enthalten, die eine Reihe von Produkten (per Referenz) enthält. Das Hauptproblem kommen, wenn ich bestellen muß, kann ich nicht Product UND Bundle zusammen bekommen ...

So habe ich bereits ein Product Schema:

const productSchema = new mongoose.Schema({ 
    file: { 
    type: String, 
    required: true, 
    }, 
    name: { 
    type: String, 
    required: true, 
    }, 
    description: { 
    type: String, 
    required: true, 
    }, 
    preparation: String, 
    allergics: { 
    type: Array, 
    required: true, 
    }, 
    price: { 
    type: Number, 
    required: true, 
    }, 
    // More fields 
}); 

module.exports = mongoose.model('Product', productSchema); 

Und ein Bundle Schema, das ref Product enthält (ein Bündel mehrere Produkte enthält):

const bundleSchema = new mongoose.Schema({ 
    name: { 
    type: String, 
    required: true, 
    }, 
    price: { 
    type: Number, 
    required: true, 
    }, 
    itemsId: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Product', 
    required: true, 
    }], 
    description: String, 
    reduction: { 
    type: Number, 
    min: 0, 
    default: 0, 
    max: 100, 
    }, 
}); 

module.exports = mongoose.model('Bundle', bundleSchema); 

Also, wenn ein Benutzer ein Bündel Aufträge oder ein einzelnes Produkt, verwende ich dieses Schema:

const orderSchema = new mongoose.Schema({ 
    orderedBy: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'User', 
    }, 
    articlesId: [ 
    { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Product', 
    }, 
    ], 
    itemsNumber: { 
    type: Array, 
    required: true, 
    }, 
    amount: Number, 
    orderedAt: Date, 
    placeToShip: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Place', 
    }, 
}); 

module.exports = mongoose.model('Order', orderSchema); 

Wie Sie sehen können, verweisen ich nur Product, aber ich möchte Product UND Bundle, ich weiß nicht, verweisen, wenn dies möglich ist, oder wenn dies der falsche Weg, um die Datenbank so zu gestalten, .

Sorry, wenn der Beitrag ein bisschen lang ist, aber ich versuche, so klar wie möglich zu sein! Danke vielmals.

Antwort

0

wenn Sie product oder bundle verweisen möchten (je nach Benutzer kauft Bündel oder Einzelprodukt) in articleId, können Sie es wie folgt tun:

Dont ref im articleId Feld Ihres orderSchema geben, nur angeben, ihre type als ObjectId.

const orderSchema = new mongoose.Schema({ 
    ... 
    articlesId: [ 
    { 
     type: mongoose.Schema.Types.ObjectId 
    }, 
    ], 
    ... 
}); 

Und während es bevölkern sagen welche model zu populate aus.

//In case user bought a product 
Order.find({findQuery}) 
    .populate({path : '',model : 'Product'}) 
    .exec(function(err,result){...}); 

//In case user bought a Bundle 
Order.find({findQuery}) 
    .populate({path : '',model : 'Bundle'}) 
    .exec(function(err,result){...}); 

Aber, müssen Sie einen Weg, um herauszufinden, user ein einziges product gekauft oder ein bundle. Hoffe das hilft dir!

+0

Ok vielen Dank, ich werde das heute Abend versuchen, Sie auf dem Laufenden zu halten! – antoine2vey

+0

Hat das funktioniert? Versuchst du es noch? –