Uploaded image for project: 'C# Driver'
  1. C# Driver
  2. CSHARP-4500

$not on inner array of strings renders invalid query with LINQ3 LinqProvider

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Unknown Unknown
    • 2.19.1
    • 2.19.0
    • LINQ3
    • None
    • Not Needed
    • Hide

      1. What would you like to communicate to the user about this feature?
      2. Would you like the user to see examples of the syntax and/or executable code and its output?
      3. Which versions of the driver/connector does this apply to?

      Show
      1. What would you like to communicate to the user about this feature? 2. Would you like the user to see examples of the syntax and/or executable code and its output? 3. Which versions of the driver/connector does this apply to?

    Description

      Summary

      Behaviour changed on how the following linq query is parsed:

       

      collection
          .AsQueryable()
          .Where(x => !x.List.Any(xx => xx.ToLower().Contains(input.ToLower())))
          .ToString(); 

       

      Wrong query MongoDB.Driver (2.19.0):

       

       { "$match" : { "List" : { "$not" : { "$elemMatch" : /string/is } } } } 

       

      Expected and worked in MongoDB.Driver (2.18.0)

       

       

       { "$match" : { "List" : { "$not" : /string/is } } } 

       

       

      This is only broken for a $not query. The folowing snippet works fine:

       

      collection
          .AsQueryable()
          .Where(x => x.List.Any(xx => xx.ToLower().Contains(input.ToLower())))
          .ToString() 

      { "$match" : { "List" : /string/is } } 

      Attachments

        Activity

          People

            robert@mongodb.com Robert Stam
            danik.raikhlin@outlook.com DanikRaikhlin N/A
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: