MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

mongo db tổng hợp kết quả ngẫu nhiên (xáo trộn)

Cụ thể đối với bản thân khung tổng hợp, không thực sự có bất kỳ cách nguyên gốc nào vì không có toán tử khả dụng nào để làm điều gì đó như tạo một số ngẫu nhiên. Vì vậy, bất kỳ kết quả phù hợp nào mà bạn có thể chiếu một trường để sắp xếp sẽ không "thực sự ngẫu nhiên" vì thiếu giá trị gốc thay đổi.

Cách tiếp cận tốt hơn là "xáo trộn" kết quả dưới dạng một mảng sau khi kết quả được trả về. Có nhiều cách triển khai "xáo trộn" khác nhau, đây là một cách triển khai dành cho 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;
}

Nhưng nếu bạn thực sự đang nói về việc xáo trộn một số lượng lớn kết quả, chẳng hạn như trong một bộ sưu tập thu được từ việc sử dụng $out trên thực tế hoặc bất kỳ bộ sưu tập nào, sau đó bạn có thể "gian lận" bằng cách sử dụng mapReduce.

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

Điều này tận dụng bản chất của mapReduce trong đó giá trị khóa luôn được sắp xếp. Vì vậy, bằng cách bao gồm một số ngẫu nhiên làm phần đầu của khóa thì bạn sẽ luôn nhận được kết quả có thứ tự ngẫu nhiên.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trong Mongoose, làm cách nào để sắp xếp theo ngày? (node.js)

  2. Cập nhật mảng đối tượng trong mongodb

  3. Khuôn khổ tổng hợp MongoDB $ group có thể trả về một mảng giá trị không?

  4. Làm cách nào để lấy _id của tài liệu được chèn một cách khéo léo sau khi chèn bằng csharp mongo?

  5. Mongoose - find ():đối tượng bên trong các tùy chọn tìm kiếm không hoạt động