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

$lt/$lte/$gte/$gt behaves differently with array operand

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major - P3 Major - P3
    • 2.6.0-rc0
    • 2.4.5
    • Querying
    • Major Change
    • ALL

    Description

      {$gt: [X]} matches arrays in 2.4.8 but not in 2.5.3. This is a change in the matcher behavior when the operand to the inequality operator is an array.

      In 2.4.8, the matching behavior is affected by the level of nesting of the array.

      In 2.5.3, the matcher returns zero documents as long as the element in the collection is an array.

      --------------------

      Problem:
      A two level nested array produces different results in 2.5.4

      NOTE: It appears that 2.5.4-Pre deals with this case correctly, if confirmed then this becomes a DOC tickets to list the changed behaviour.

      Reproduce:

      db.q.drop()
      db.q.insert({"c" : { "c" : [ [ [ [ ISODate("1383-05-28T00:00:00Z") ] ] ] ] }})
      db.q.insert({"c" : { "c" : [ [ [ ISODate("1383-05-28T00:00:00Z") ] ] ] }})
      db.q.insert({"c" : { "c" : [ [ ISODate("1383-05-28T00:00:00Z") ] ] }})
      db.q.insert({"c" : { "c" : [ ISODate("1383-05-28T00:00:00Z") ] }})
      db.q.find( { $nor : [ { "c.c" : { $gt : [ [ ISODate("2013-09-29T10:40Z") ] ] } } ] } )

      2.4.5
      Returns 3 documents, but not the [ [ value ] ]

      { "_id" : ObjectId("526fdf7c8a43120c67c8c575"), "c" : { "c" : [  [  [  [  ISODate("1383-05-28T00:00:00Z") ] ] ] ] } }
      { "_id" : ObjectId("526fdf7c8a43120c67c8c576"), "c" : { "c" : [  [  [  ISODate("1383-05-28T00:00:00Z") ] ] ] } }
      { "_id" : ObjectId("526fdf7c8a43120c67c8c578"), "c" : { "c" : [  ISODate("1383-05-28T00:00:00Z") ] } }

      2.5.4-Pre returns all documents

      { "_id" : ObjectId("526fdf886ca3a8357d0fe402"), "c" : { "c" : [  [  [  [  ISODate("1383-05-28T00:00:00Z") ] ] ] ] } }
      { "_id" : ObjectId("526fdf886ca3a8357d0fe403"), "c" : { "c" : [  [  [  ISODate("1383-05-28T00:00:00Z") ] ] ] } }
      { "_id" : ObjectId("526fdf886ca3a8357d0fe404"), "c" : { "c" : [  [  ISODate("1383-05-28T00:00:00Z") ] ] } }
      { "_id" : ObjectId("526fdf886ca3a8357d0fe405"), "c" : { "c" : [  ISODate("1383-05-28T00:00:00Z") ] } }

      It appears that 2.4.x does not deal with the [ [ value ] ] case correctly.

      Attachments

        1. server11444.js
          0.2 kB
        2. server11444.js
          1 kB

        Activity

          People

            benety.goh@mongodb.com Benety Goh
            alvin Alvin Richards (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: