Ich habe eine Tabellenstruktur wie unten angegeben.So erhalten Sie ein vorhandenes Dokument oder ein neu hinzugefügtes Dokument
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6b8"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6b9"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 2
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ba"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 2,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bb"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 1,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bc"),
"product" : "product3",
"title" : "Alt Summit 3",
"category" : "category1",
"order" : 3,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bd"),
"product" : "product4",
"title" : "Alt Summit 4",
"category" : "category1",
"order" : 4
}
Ich möchte zuerst die Datenbankstruktur erklären.
Ich habe Standardprodukte für jeden Benutzer auf meiner Website und Benutzer können ihre eigenen Produkte zur Liste hinzufügen oder sie können die bestehende Liste neu anordnen. Wenn sie ein neues Produkt hinzufügen, wird es durch ihren Benutzernamen hinzugefügt. Wenn sie die Produkte nachbestellen, bekomme ich die vorhandenen Standarddatensätze und füge sie ein, indem ich den Benutzernamen anhefte und die Reihenfolge ändere (das wirst du verstehen, wenn du die obigen Daten beobachtest).
Nun, wie kann ich die Produkte für eine benutzerspezifische Kategorie erhalten.
Zum Beispiel, wenn ich alle Produkte für einen Benutzer1 in Kategorie1 erhalten soll, sollte die Ausgabe wie folgt sein (sortiert nach dem Auftragsfeld). Wenn Sie die obigen Daten sorgfältig beobachten, wird das gleiche Produkt mit dem Zusatzfeld added_by wiederholt und die Reihenfolge geändert. Ich möchte die Reihenfolge des Benutzers erhalten, wenn der Benutzer es anpasst, wenn nicht die Standardreihenfolge.
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bb"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 1,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ba"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 2,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bc"),
"product" : "product3",
"title" : "Alt Summit 3",
"category" : "category1",
"order" : 3,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bd"),
"product" : "product4",
"title" : "Alt Summit 4",
"category" : "category1",
"order" : 4
}
Ich bin offen für jeden Vorschlag auf, wenn ich die Struktur der Tabelle ändern sollte. Aber zu jedem gegebenen Zeitpunkt sollte ich in der Lage sein, zu dem Ausgang zu gelangen, den ich oben erwähnt habe.
'db.yourCollection.find ({ "Kategorie": "category1", "added_by": "user1"}). Sort ({ "order": 1})' sollten Sie den Cursor zurück, die Sie‘ suchend, nein? – Adam
Nein @Adam Ich sollte immer noch die Standardprodukte erhalten, wenn der Benutzer die Objekte nicht neu geordnet hat. Die obige Abfrage gibt mir nur Benutzer hinzugefügt Produkte oder Benutzer nachbestellte Produkte. Wenn dasselbe Produkt in derselben Kategorie sowohl standardmäßig als auch von einem Benutzer hinzugefügt wird, sollte ich dann die Benutzerbestellung zusammen mit anderen Standardprodukten erhalten. – Shravya
die Standardprodukte sind definiert als diejenigen, die keinen '" added_by "' Schlüssel haben? Wenn ja, dann versuche 'db.yourCollection.find ({" $ oder ": [{" category ":" category1 "," added_by ":" user1 "}, {" added_by ": {" $ exists ": false} }]}).sort ({"order": 1}) ' – Adam