Возможен ли верхний индекс K в Mongodb? - PullRequest
0 голосов
/ 03 августа 2020

Допустим, у меня есть коллекция пользователей . У него всего одно поле оценка (кроме поля id). В нем 1 миллион документов.

Если я построю индекс по счету , в индексе будет 1 миллион записей. Но меня интересуют только 10 лучших результатов. Можно ли построить индекс 10 лучших по этому полю?

1 Ответ

0 голосов
/ 03 августа 2020

Ну, вы всегда можете построить индекс по убыванию для поля scores и использовать ограничение.

Сортировка по убыванию и ограничение до 10 выполнят свою работу.

В примере ниже представлена ​​коллекция из 1 миллиона документов, каждый из которых имеет поле score.

'use strict';
const mongoose = require('mongoose');
const { Schema } = mongoose;

run().catch(console.error);

async function run () {
  await mongoose.connect('mongodb://localhost:27017/test', {
    useNewUrlParser: true,
    useUnifiedTopology: true
  });

  await mongoose.connection.dropDatabase();

  const userSchema = new Schema({
    score: Number
  });

  const User = mongoose.model('User', userSchema);

  const users = Array.from({ length: 1000 * 1000 }).map((v, i) => ({ score: i + 1 }));
  await User.init();

  await User.insertMany(users);

  const before = Date.now();
  await User.find().sort({ score: -1 }).limit(10);
  const after = Date.now();

  console.log(`Query took: ${after - before}ms.`);
}

Без индекса в поле score вывод будет:

Query took: 1468ms.

С индекс по убыванию :

Query took: 9ms.

Вот как вы можете создать индекс в mon goose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...