MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB:търсене на тръбопровод с бавна производителност в сравнение с основното търсене

Работата е там, че когато направите lookup използвайки pipeline с етап на съвпадение, тогава индексът ще се използва само за полетата, които са съпоставени с $eq operator а за останалите индексът няма да се използва.

И примерът, който посочихте с тръбопровод, ще работи по този начин ( отново индексът няма да се използва тук, тъй като не е $eq )

db.matches.aggregate([
  {
    $lookup: {
      from: "players",
      let: {
        ids: {
          $map: {
            input: "$players",
            in: "$$this._id"
          }
        }
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $in: [
                "$_id",
                "$$ids"
              ]
            }
          }
        }
      ],
      as: "players"
    }
  }
])

Тъй като играчите са масив от обекти, първо трябва да бъдат съпоставени с масив от идентификатори

MongoDB Playground



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проекция на MongoDb заявка с помощта на Spring данни и QueryDSL

  2. Как да изхвърлите колекция в json файл с помощта на pymongo

  3. Как да попълним вложени обекти в mongoose?

  4. 4 начина за изтриване на документ в MongoDB

  5. как да вмъкнете определена стойност на масив в mongodb с помощта на angularjs