Это может быть связано с неправильной записью в коллекции system.js для данной базы данных. Случай, который я видел в system.js, представляет собой запись без «строкового» имени, например:
{"_id": ObjectId ("4dee4ee586da7d1330b33d87"), "значение": функция (foo) ...
Удалите эту запись из system.js и ваши $, где функции должны снова работать.
ДЛИННЫЙ ответ, или как воспроизвести это:
Создать новую базу данных:
> use TempTest
Создание тестовой коллекции:
db.createCollection ( "myTestCollection")
{"ок": 1}
Заполните тестовую коллекцию некоторыми данными:
db.myTestCollection.save ({a: 1})
Запрос с использованием $, где :
db.myTestCollection.find ({$ where: "this.a == 1"})
Мы получаем ожидаемый ответ: {"_id": ObjectId ("4dee98e26fcbba3e6d0ba2c9"), "a": 1}
Теперь создайте коллекцию system.js, в которой хранятся функции js для выполнения на стороне сервера:
db.createCollection ("system.js")
{"ок": 1}
Вставить запись в system.js без указания значения для _id:
db.system.js.save ({значение: "foo"})
Повторно выполнить последний запрос, что теперь приводит к печально известной ошибке:
db.myTestCollection.find ({$ where: "this.a == 1"})
ошибка: {"$ err": "имя должно быть строкой", "код": 10209}
Теперь удалите этот мошеннический ряд из system.js:
db.system.js.remove ()
Запустите запрос еще раз, и увидите, что он снова возвращает ожидаемый ответ.
db.myTestCollection.find ({$ where: "this.a == 1"})
{"_id": ObjectId ("4dee98e26fcbba3e6d0ba2c9"), "a": 1}
Надеюсь, это кому-то поможет - сегодня это сводило меня с ума!