Вы можете использовать оператор $ where.
> db.orders.save({Order: {items: [1,2]}})
> db.orders.save({Order: {items: [1,2,3]}})
> db.orders.find({$where:function() { if (this["Order"]["items"].length > 2) return true; }})
{ "_id" : ObjectId("4d334c9102bcfe450ce52585"), "Order" : { "items" : [ 1, 2, 3 ] } }
Два недостатка $ where в том, что он не может использовать индекс, и объект BSON должен быть преобразован в объект JavaScript, так как вы выполняетепользовательская функция JavaScript для каждого документа в коллекции.
Итак, $ where может быть очень медленным для больших коллекций.Но для специальных или редко запускаемых запросов это очень удобно.Если вам часто нужно запускать подобные запросы, следуйте рекомендациям Bugai13, так как вы можете затем индексировать ключ, в котором вы храните размер массива.