sql >> Databáze >  >> NoSQL >> MongoDB

Jak seřadit kolekci pomocí posledního prvku pole

Pokud je to možné, navrhoval bych, abyste vždy (dvojitě) ukládali hodnotu, podle které chcete třídit. Vložte jej do pole a do druhého pole. Kdykoli do pole vložíte novou hodnotu (nebo pole uložíte), přidejte nové pole odpovídající „poslední hodnotě v poli“ a pak podle toho indexujte a seřaďte. V níže uvedeném příkladu jsem to nazval lastR :

{ "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR": 3 }
{ "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR": 1 }
{ "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR": 10 }
{ "value" : -3, "r" : [ ] }

Vytvořte index:

db.so.ensureIndex({lastR: 1})

A pak použijte:

> db.so.find().sort({lastR: 1})
{ "_id" : ObjectId("5203a1c83c5438af60de63a1"), "value" : -3, "r" : [ ] }
{ "_id" : ObjectId("5203a1ad3c5438af60de639f"), "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR" : 1 }
{ "_id" : ObjectId("5203a1d33c5438af60de63a2"), "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR" : 3 }
{ "_id" : ObjectId("5203a1b73c5438af60de63a0"), "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR" : 10 }

Bude to mnohem univerzálnější a rozšiřitelné než pokusy o použití agregačního řešení (které bude mít limit 16 MB na výslednou sadu a bude mnohem složitější získávat složité dokumenty, když je třeba vypořádat se s projekcí).



  1. Nejjednodušší způsob, jak nainstalovat rozšíření Mongodb PHP v Ubuntu 13.10 (sucy)?

  2. Vztahy v databázi orientované na dokumenty?

  3. Podmíněná částka $ v MongoDB

  4. co je formát archivu mongodb?