Частичный индекс MongoDB не работает должным образом с подсчетом - PullRequest
0 голосов
/ 30 апреля 2018

Вкл. mongoDB 3.6.3 Я создаю эту коллекцию с двумя миллионами записей:

function randInt(n) { return parseInt(Math.random()*n); }

for(var j=0; j<20; j++) {  
  print("Building op "+j);
  var bulkop=db.media.initializeOrderedBulkOp() ;
  for (var i = 0; i < 100000; ++i) {
    bulkop.insert(    
      {
        id_profile: NumberLong("222"),
        needle_id: NumberInt(randInt(2000000000)),
        visibility: NumberInt(randInt(5)),
      }
    )
  };
  print("Executing op "+j);
  bulkop.execute();
}

затем я создаю этот частичный индекс :

db.media.createIndex( 
  {"id_profile": 1, "visibility": 1}, 
  {unique: false, partialFilterExpression: { "needle_id": { $exists: true } }} 
); 

затем я запускаю этот запрос, который точно соответствует частичному индексу:

db.media.count({$and:[
  {id_profile:NumberInt(222)},
  {visibility:NumberInt(0)},
  {needle_id:{$exists:true}}]}) 

но он медленный :( На самом деле это такая же скорость, как если бы я не использовал частичный индекс и где мне нужно отфильтровать все документы, у которых нет needle_id:

db.media.createIndex( 
  {"id_profile": 1, "visibility": 1}, 
  {unique: false} 
); 

db.media.count({$and:[
  {id_profile:NumberInt(222)},
  {visibility:NumberInt(0)},
  {needle_id:{$exists:true}}]}) 

Так это ошибка с частичным индексом? Что я могу сделать, чтобы ускорить мой счет?

...