...
Find command $where no longer respects the scope in CodeWithScope. For example, on 4.2: >>> db.test.insert_many([{"x": i} for i in range(10)]) >>> len(list(db.test.find().where('this.x < 3'))) 3 >>> len(list(db.test.find().where(Code('this.x < i', {'i':3})))) 3 On v4.3.3-387-g46ee960: >>> db.test.insert_many([{"x": i} for i in range(10)]) >>> len(list(db.test.find().where('this.x < 3'))) 3 >>> len(list(db.test.find().where(Code('this.x < i', {'i':3})))) Traceback (most recent call last): File "", line 1, in File "/Users/shane/git/mongo-python-driver/pymongo/cursor.py", line 1156, in next if len(self.__data) or self._refresh(): File "/Users/shane/git/mongo-python-driver/pymongo/cursor.py", line 1073, in _refresh self.__send_message(q) File "/Users/shane/git/mongo-python-driver/pymongo/cursor.py", line 953, in __send_message response = client._run_operation_with_response( File "/Users/shane/git/mongo-python-driver/pymongo/mongo_client.py", line 1342, in _run_operation_with_response return self._retryable_read( File "/Users/shane/git/mongo-python-driver/pymongo/mongo_client.py", line 1464, in _retryable_read return func(session, server, sock_info, slave_ok) File "/Users/shane/git/mongo-python-driver/pymongo/mongo_client.py", line 1334, in _cmd return server.run_operation_with_response( File "/Users/shane/git/mongo-python-driver/pymongo/server.py", line 136, in run_operation_with_response _check_command_response(first) File "/Users/shane/git/mongo-python-driver/pymongo/helpers.py", line 161, in _check_command_response raise OperationFailure(msg % errmsg, code, response) pymongo.errors.OperationFailure: ReferenceError: i is not defined : @:1:15 Could this be caused by SERVER-45454 or SERVER-46098?
james.wahlin@10gen.com commented on Fri, 28 Feb 2020 20:55:15 +0000: Closing as a duplicate of SERVER-46492 which will add better messaging for $where rejection of CodeWithScope.. james.wahlin@10gen.com commented on Wed, 19 Feb 2020 21:59:24 +0000: shane.harvey I reopened this ticket and repurposed it towards improving the error message. shane.harvey commented on Wed, 19 Feb 2020 19:57:09 +0000: Given that this is the expected behavior can we change the server to return an informative error when given a CodeWithScope? Like "CodeWithScope is no longer supported" or something? carl.champain commented on Wed, 19 Feb 2020 14:58:49 +0000: I'm closing this ticket since this change was intentional (SERVER-45454). james.wahlin@10gen.com commented on Wed, 19 Feb 2020 14:12:56 +0000: This change is intentional and was made under SERVER-45454. CodeWithScope support has been removed for both $where and the mapReduce command for MongoDB 4.4. Additionally, CodeWithScope will be deprecated as a BSON type under SERVER-45460 for 4.4.