Используя scala и lift, как я могу выполнять эффективные операции фильтрации документов в коллекции mongodb?

У меня есть коллекция пользователей в mongodb, и я использую lift/scala для выполнения операций User.findAll и получения количества пользователей, созданных за определенные периоды времени. Я использую метод getTime для objectId, однако мне нужно применить несколько методов и умножить их, чтобы получить строку, хранящуюся в каждом документе, преобразовать ее обратно в objectID и преобразовать в секунды из миллисекунд. Это строка кода для пользователей, созданная за последний час: val users = User.findAll.filter{ u:User => ((((ObjectId.massageToObjectId(u._id)). GetTime)/ 1000) <= 3600)}. длина

Мне нужно найти способ сделать это внутри базы данных, а не помещать все данные в память и затем фильтровать их с помощью функции. В прошлом я использовал queryBuilder такими способами для достижения той же цели, но в этом случае у меня не было других методов вычислений, которые можно было бы применить к значению из документа: val qry1 = QueryBuilder.start("numberOfFriends"). MoreThan(0).get var oneplus:List[User] = User.findAll{qry1}

Мне также известны такие методы: User.findAll(("name" -> "joe") ~ ("age" -> 27))

И я знаю, что findall может принимать множество других вещей, таких как DBObject, называемый sort. Но я не знаю, как это использовать.

Если кто-то знает, как манипулировать одним из этих методов или может предложить другой, это будет с благодарностью.

Спасибо, Ронни

1 ответ

Я предлагаю вам взглянуть на Rogue Foursquare. Это очень хороший способ запроса MongoDB, и он безопасен для типов!

Вот как будет выглядеть ваш запрос:

// usage
val d1 = new DateTime(2010, 5, 1, 0, 0, 0, 0, DateTimeZone.UTC)
val users = User where (_._id after d1) count()
Другие вопросы по тегам