MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

mongo db обобщени рандомизирани (разбъркване) резултати

Конкретно за самата рамка за агрегиране всъщност няма никакъв естествен начин, тъй като все още няма наличен оператор, който да направи нещо като генериране на произволно число. Така че каквото и съвпадение, по което бихте могли да проектирате поле за сортиране, няма да бъде „наистина произволно“ поради липса на променяща се начална стойност.

По-добрият подход е да "разбъркате" резултатите като масив, след като резултатът бъде върнат. Има различни реализации на „разбъркване“, ето едно за JavaScript:

function shuffle(array) {
   var currentIndex = array.length
    , temporaryValue
    , randomIndex
    ;

  while (0 !== currentIndex) {
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

Но ако всъщност говорите за разбъркване на голям брой резултати, като например в колекция, получена от използването на новия $out оператор или която и да е колекция всъщност, тогава можете да "измамите", като използвате mapReduce.

db.collection.mapReduce(
    function(){
        var random = Math.floor( Math.random() * 100000 );
        emit({ rand: random, id: this._id }, this );
    },
    function(){},
    { out: { replace: "newcollection" } }
);

Това се възползва от естеството на mapReduce, тъй като стойността на ключа винаги е сортирана. Така че като включите произволно число като водеща част от ключа, винаги ще получавате произволен подреден резултат.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb и запитване, което търси полигони, които пресичат многоъгълник

  2. Преименуването на поле във вграден документ в масив в MongoDB не работи

  3. Как да постигнем връщане назад в транзакции в mongo?

  4. Съхраняване на йерархия на директории в хранилище на данни ключ-стойност

  5. премахнете _id от резултата от mongo