Není zde mnoho podrobností, ale mohu uvést příklad případu ke zvážení. Zvažte následující sadu dokumentů:
{ "user" : "fred", "color" : "black" }
{ "user" : "bill", "color" : "blue" }
{ "user" : "ted", "color" : "red" }
{ "user" : "ted", "color" : "black" }
{ "user" : "fred", "color" : "blue" }
{ "user" : "bill", "color" : "red" }
{ "user" : "bill", "color" : "orange" }
{ "user" : "fred", "color" : "orange" }
{ "user" : "ted", "color" : "orange" }
{ "user" : "ally", "color" : "orange" }
{ "user" : "alice", "color" : "orange" }
{ "user" : "alice", "color" : "red" }
{ "user" : "bill", "color" : "purple" }
Předpokládejme tedy, že chcete bublinat položky pro uživatele „účtovat“ a „tedy“ na začátek vašich výsledků, pak vše ostatní seřazené podle user
a color
. Co můžete udělat, je spustit dokumenty prostřednictvím $projektu
etapa v souhrnu takto:
db.bubble.aggregate([
// Project selects the fields to show, and we add a weight value
{$project: {
_id: 0,
"user": 1,
"color": 1,
"weight": {$cond:[
{$or: [
{$eq: ["$user","bill"]},
{$eq: ["$user","ted"]}
]},
1,
0
]}
}},
// Then sort the results with the `weight` first, then `user` and `color`
{$sort: { weight: -1, user: 1, color: 1 }}
])
Takže to znamená podmíněně přiřadit hodnotu weight
podle toho, zda user
byla přiřazena k jedné z požadovaných hodnot. Dokumentům, které se neshodují, je jednoduše přiřazena 0
hodnotu.
Když to přesuneme upraveno dokument na $sort
fázi, novou weight
klíč lze použít k seřazení výsledků, takže "vážené" dokumenty budou nahoře a vše ostatní bude následovat.
Existuje několik věcí, které můžete udělat pro $project váhu tímto způsobem. Další informace naleznete v příručce operátora:
http://docs.mongodb.org/manual/reference/operator/aggregation/