MongoDB and JavaScript: Injecting Bias into Randomness

My current project involves creating a system where users can submit images, which are then stored in a database using a Schema. Users can then use a command (via discord/discordjs) to retrieve a random biased/weighted image from MongoDB and have it sent to them for voting or reporting.

That's the concept, here's what I've accomplished so far:

.

Users can successfully submit images through a discord command.

The MongoDB document is structured with the following values:

const imageSchema = new Schema({
imageId: { type: Number, required: true, index: { unique: true } },
imageLocation: reqString,
votes: {type: Number, required: false, default: 0},
verified: {type: Number, required: false, default: 0},})

Check out an image of how it appears in mongodb compass for additional context

I'm currently stuck on figuring out how to scan all the documents and develop a method to randomly select one of the most highly voted images (not necessarily the highest voted, but ones with more votes should appear more frequently), using JavaScript.

Any suggestions or code snippets illustrating concepts would be greatly appreciated.

Answer №1

To leverage the power of the aggregation pipeline, consider implementing the $sample operator.

Here's an example that may be useful:

photoSchema.aggregate([
  {
    $sample: {
      size: 1 // <- determine number of random documents needed
    }
  }
])

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Dynamic resizing in NextJs does not trigger a re-render

My goal is to dynamically pass the width value to a component's styles. Everything works fine on initial load, but when I resize the window, the component fails to re-render even though the hook is functioning as intended. I came across some informat ...

Utilizing Vector3 for Parametric Geometry calculations

As I update a script to a newer version of three.js, I encountered an issue with ParametricGeometry. The error message "THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter" keeps appearing. Below is the section of code causing t ...

Determining the Location of a Drag and Drop Item

I have been utilizing the code found at for implementing Drag & Drop functionality. My inquiry is: How can I retrieve the exact position (x,y) of a group once it has been dragged and dropped? ...

Quick way to specify type for Observable in Typescript

Exploring Shortcut Declarations When working with TypeScript, I often take a shortcut when declaring object shapes. Instead of creating an interface first and then specifying that the object conforms to that type, I simply do: object: { fizz: boolean, buz ...

Monitor changes to DOM elements with JavaScript Mutation Observer

Recently, I've been experimenting with a Mutation Observer and using the following configuration: config = { characterData: true, characterDataOldValue: true }; This is the structure of my HTML page: <!DOCTYPE html> <html> <head& ...

Is there a way to direct Webpack in a Next.JS application to resolve a particular dependency from an external directory?

Is it possible to make all react imports in the given directory structure resolve to react-b? |__node_modules | |__react-a | |__app-a | |__component-a | |__next-app | |__react-b | |__component-b // component-a import { useEffect } from ' ...

Retrieve user information using a GET request in an Express server

I am working on creating a GET API route to retrieve all tasks assigned to a specific user. However, when I test the call (http://localhost:4000/api/taskuser/getalltasks?userId=5bfe4af425ddde2b04eb19c6), I am not getting any errors but still receiving all ...

Exploring the selected object in VueJs

I am attempting to showcase a fullName function using the selected value HTML : <div id="test"> <h1>{{ sayHello }}</h1> <select v-model="selected"> <option v-for="person in persons" v-bind:value="person.about"> {{ per ...

Leverage AJAX for real-time Django Model updates

Seeking insights on how to effortlessly update a Django model through AJAX without reloading the page or requiring user input for saving. Various tutorials address fetching data from Django models using AJAX, yet resources on updating models remain scarce. ...

Is it possible to create clickable titles in highcharts that also interact with bootstrap popovers?

Hello, I'm trying to figure out how to turn the title in highcharts into a clickable link that works with bootstrap's popover feature. You can find an example of what I'm working on here: http://jsfiddle.net/287JP/4/ $(function () { ...

Struggling with creating a responsive page design using Bootstrap to fit all screen sizes

Seeking advice on optimizing my Vue.js landing page for small screens. Bootstrap documentation was helpful but struggling to make it look clean and presentable on tablets and smartphones. Any tips or suggestions on how I can modify the layout for better ...

Is there a delay in Javascript identifying user existence when retrieving values from ajax?

I'm working on a script that checks if a username already exists before allowing a visitor to proceed. Here's a snippet of the code I'm using: EDIT: I've made some adjustments based on your feedback, but I'm still having trouble g ...

step-by-step guide on transferring the text content of an HTML paragraph element to another HTML paragraph element through JavaScript in ASP.NET

I'm looking for help with passing the text value from one HTML paragraph element to another when a JavaScript function is called. The function loads a div element with an enlarged image and a paragraph content. Below is the code I am using: JavaScrip ...

Create a panoramic view using six images using Three.js and WebGL

After successfully building a panorama with three.js using the CSS3D renderer, I am now looking to achieve the same result using the WebGL renderer. When working with CSS3D, I utilized the following code to create a seamless panorama: var sides = [ { url ...

typescript event handling with oninput

When working with a slider, I am trying to detect when the user changes the value of the slider in order to display it. I have been following the tutorial at https://www.w3schools.com/howto/howto_js_rangeslider.asp. However, this code is not compatible wi ...

MongoDB: Utilizing unique compound indexes in conjunction with compound shard keys

Imagine having a collection with a shard key composed of {a:1, b:1}. In addition to the index for the shard key, there is an extra index defined as {a:1, c:1, d:1}, where the shard key is not part of this secondary index. If a query is executed with valu ...

Designing an advanced remote upload system using jQuery AJAX and PHP

Currently, I am in the process of developing an image hosting script and everything is going smoothly so far. To enable local uploading with drag & drop + AJAX, I have utilized various plugins which are working perfectly. Now, I am moving on to implementin ...

Is there a way to obtain two different colors from a single color?

Is there a way to use a method that displays two different colored borders in a specific color? Is it possible to implement this using PHP or jQuery? Apologies for my poor English Thank you, Rory McCrossan ...

Valums file-uploader: Restricting file uploads based on user's credit score

Currently utilizing the amazing file uploader by Valums, which can be found at https://github.com/valums/file-uploader One feature I am looking to incorporate is a limit based on the user's account balance. The initial image upload is free, so users ...

What is the best way to combine two arrays while ensuring the elements of the second array appear before the elements of the first

Is there a way to concatenate two arrays in JavaScript, where the second array appears before the first? For example: const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const combinedArr = arr1.concat(arr2); console.log(combinedArr); I am aware that yo ...