mongoDB viele zu viele mit einer Abfrage?
in mysql verwende ich JOIN und eine Abfrage ist kein problem. was ist mongo?
vorstellen, Kategorien und Produkte.
Produkte können mehreren Kategorien.
Kategorien können mehr Produkt.
(viele zu viele-Struktur)
und der administrator kann die Kategorien Bearbeiten in der Verwaltung (Kategorien getrennt werden müssen)
seine mögliche schreiben Produkt mit Kategorien, Namen in einer Abfrage?
habe ich diese Struktur
categories {
name:"categoryName",
product_id:["4b5783300334000000000aa9","5783300334000000000aa943","6c6793300334001000000006"]
}
products {
name:"productName",
category_id:["4b5783300334000000000bb9","5783300334000000000bb943","6c6793300334001000000116"]
}
kann ich jetzt einfach alle Produkt-Kategorien und Produkt in irgendeiner Kategorie und Kategorien allein für das editieren. aber wenn ich will, schreiben Produkt mit Kategorien, Namen brauche ich zwei Abfragen: eine für Produkt-Kategorien-id und die zweite, um die Kategorien der Namen von Kategorien, die durch das ids.
ist das der richtige Weg? oder dieser Struktur ungeeignet ist? ich möchte nur eine Abfrage, aber ich weiß nicht, ob das ist möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yep, MongoDB ist speziell schlimm, in dieser besonderen Art von operation. Es ist jedoch auch eine Frage des Umfangs. Wenn Sie über 30 Millionen Produkte und Sie mitmachen wollen 3 Millionen Produkten Ihrer Kategorie, werden Sie finden, dass es nicht sehr schnell in vielen Datenbanken (auch wenn es nur eine Zeile code).
Was MongoDB erfordert hier einige de-Normalisierung.
Ihre Sammlungen wird wahrscheinlich so Aussehen:
Hier ist, wie es funktioniert (grobe Schätzung, nicht meine Mongo-Instanz praktisch):
Schnappen Sie sich Produkte und deren Kategorien
db.products.find({"_id": {$in:[1,2,3]}, {name:1,categories:1})
Schnappen Sie sich Produkte mit einer bestimmten Kategorie:
db.products.find({"categories.0": {$in:[x,y,z]}},{categories:1,name:1} }
Ja, es ist nicht ganz das gleiche. Und Sie müssen für eine Aktualisierung alle der Produkt-Datensätze, wenn Sie ändern Sie den Namen einer Kategorie. Ich weiß, das scheint seltsam, aber das ist standard für die Denormalisierung.
BTW, ich gehe davon aus, dass Sie hier dabei sind, haben viele Produkte und deutlich weniger Kategorien. Diese Methode ist wahrscheinlich am besten, wenn Sie sagen, 100 Elemente in jeder Kategorie. Wenn Sie 5 Artikel in jeder Kategorie, dann werden Sie wahrscheinlich wollen, um zu speichern mehr der Kategorie-Informationen in jeder Position.
Ja, es ist die einzige Möglichkeit, die Sie haben. Es gibt keine join-Möglichkeit.
Aber Sie können eine Menge von Informationen in Ihren Kategorien Produkt oder ein ähnliches Dokument :
Aber Sie müssen einige callback-update für alle-Dokument, wenn Sie auf die Veränderung.