• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

325
Views
Mangosta .sort rompe .skip & .limit

Así que implementé infiniscroll con mongoose y mi consulta se ve así

 const posts = await Seed.find({status: 'APPROVED', 'color.name': color}) .skip(parseInt(skip) || 0) .limit(8) .exec()

Eso funciona muy bien, desde 0 hasta el final de las publicaciones. Sin embargo, si agrego .sort({votos a favor: -1})

 const posts = await Seed.find({status: 'APPROVED', 'color.name': color}) .sort({upvotes: -1}) .skip(parseInt(skip) || 0) .limit(8) .exec()

Todo se vuelve loco, puedo obtener la misma publicación 6 veces.

He mirado esto durante horas y simplemente no puedo entender por qué sucede esto y se siente como un error.

Probé .sort('-upvotes'), .sort({upvotes: 'desc'}), .sort({'upvotes': 'desc'})

Actualización: Ordenar por .sort('-date') realmente funciona, así que tengo un problema con los votos a favor específicamente. La mayoría de las publicaciones tiene 1 voto a favor. ¿La mangosta se aleatoriza entonces? Suena muy extraño si lo hizo

si alguien me puede ayudar a resolver esto se lo agradeceria mucho

about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Básicamente, su pregunta es similar a la paginación.

Debido a que sus múltiples documentos contienen el mismo valor de votos a upvotes , mongo no puede reconocer la diferencia (entre los mismos valores) y puede dar el mismo documento una y otra vez.

Por ejemplo, suponga que su limit es 2 y los siguientes son sus documentos.

 [{ upvotes: 1, doc: "a" }, { upvotes: 2, doc: "b" }, { upvotes: 2, doc: "c" }, { upvotes: 3, doc: "d" }]

Ahora, si usa sort con votos a upvotes: -1 y limit 2

Puede obtener en la primera página

 [{ upvotes: 3, doc: "d" }, { upvotes: 2, // here mongo fails to make difference doc: "c" // document c }]

o puede dar

 [{ upvotes: 3, doc: "d" }, { upvotes: 2, // here mongo fails to make difference doc: "b" // document b }]

Significa que mongo arroja aleatoriamente los documentos que tienen el mismo valor de campo de sort .

La solución es demasiado simple aquí, simplemente coloque _id consecuencia

 const posts = await Seed.find({ status: 'APPROVED', 'color.name': color}) .sort({upvotes: -1, _id: -1 }) .skip(parseInt(skip) || 0) .limit(8) .exec()
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error