Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-26796

planCacheSetFilter doesn't work for queries emitted by pymongo to MongoDB 2.6 if projection is not empty

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Major - P3 Major - P3
    • None
    • None
    • None
    • None
    • Fully Compatible
    • ALL

    Description

      I know that MongoDB 2.6 is quite an old version, and the issue is not present in the newest MongoDB 3.2, but I can't switch to MongoDB 3.2 easily. I wonder if there is any workaround?
      The following script exposes the problem:

      #!/bin/bash
       
      DB="test"
       
      mongo <<__EOF
      use $DB
      db.e.drop()
      db.e.insert({"key1": "some-val-1", "key2": "some-val-2"})
      db.e.createIndex({'key1': 1})
      db.e.createIndex({'key2': 1})
       
      db.runCommand({"planCacheClearFilters": "e"})
      db.runCommand({"planCacheSetFilter": "e", 
          "query": {"key1": 1, "key2": 1},
          "indexes": [ {"key1": 1} ]})
      db.runCommand({"planCacheSetFilter": "e", 
          "query": {"key1": 1, "key2": 1},
          "projection": {"key1": 1},
          "indexes": [ {"key1": 1} ]})
      db.runCommand({"planCacheListFilters": "e"})
      __EOF
       
      mongo <<__EOF
      exp1 = db.e.find({"key1": "val1", "key2": "val2"}).explain()
      exp2 = db.e.find({"key1": "val1", "key2": "val2"}, {"key1": 1}).explain()
      print("MongoClient no projection: " + exp1.filterSet)
      print("MongoClient projection: " + exp2.filterSet)
      __EOF
       
      python <<__EOF
      from pymongo import MongoClient
       
      cl = MongoClient()
      db = cl["$DB"]
      e = db['e']
       
      curs = e.find({"key1": "val1", "key2": "val2"})
      print "Python no projection:", curs.explain()['filterSet']
      curs = e.find({"key1": "val1", "key2": "val2"}, projection=["key1"])
      print "Python projection:", curs.explain()['filterSet']
      __EOF
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            mba Marcin Barczy?ski
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: