Uploaded image for project: 'Mongoid'
  1. Mongoid
  2. MONGOID-5272

broken_and is still very broken

    • Type: Icon: Improvement Improvement
    • Resolution: Won't Do
    • Priority: Icon: Unknown Unknown
    • None
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None

      The new "broken_and = false" behavior as documented here looks horribly confusing. As a user I have no idea how this works, and I'm scared to ever use the `.and` method.

      Here is the example:

       

      Band.where(id: 1)
          .and({year: {'$in' => [2020]}}, {year: {'$in' => [2021]}})
          .where(id: 2) 
      
      #<Mongoid::Criteria selector:
           { "_id"=>1,
             "year"=>{"$in"=>[2020]},
             "$and"=>[{"year"=>{"$in"=>[2021]}}, {"_id"=>2}] }   # WAT?!

       

       

      A .where expression coming after an .and should not be retroactively inserted into the last condition of the and... it's completely bizarre.

      I challenge you to do an internal poll within the MongoDB office and see if anyone can guess this behavior. I will bet that no one will able to.

      I think the following would make sense:

      Option A) Preferred -- Mongo query is generated EXACTLY as the Ruby code reads. Most intuitive, users will LOVE you.
      
      Band.where(id: 1)
          .and({year: {'$in' => [2020]}}, {year: {'$in' => [2021]}})
          .where(id: 2) 
      
      #<Mongoid::Criteria selector:
         { "_id"=>1,
           "$and"=>[{"year"=>{"$in"=>[2020]}, "year"=>{"$in"=>[2021]}}],
           "_id"=>2 }
      
      Option B) .and combines with the .where BEFORE it.
      
      #<Mongoid::Criteria selector:
         { "$and"=>[{"_id"=>1}, {"year"=>{"$in"=>[2020]}, "year"=>{"$in"=>[2021]}}],
           "_id"=>2 }
      

      I strongly prefer option A. I think it was huge mistake to ever try to match ActiveRecord's behavior. But option B, if it is clearly documented in BOLD RED font is also acceptable.

            Assignee:
            jamis.buck@mongodb.com Jamis Buck
            Reporter:
            shields@tablecheck.com Johnny Shields
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: