指定查询
Overview
在本指南中,您可以了解如何在 MongoDB Kotlin 驱动程序中指定查询。
大多数 CRUD 操作允许您通过在查询筛选器中指定匹配条件来缩小匹配文档的范围。 查询筛选器包含一个或多个应用于特定字段的查询操作符,这些字段确定要包含在结果集中的文档。
在本页中,我们将介绍以下查询操作符,并举例说明如何使用它们:
本指南中的示例使用 paint_purchases
集合中的以下文档:
{ "_id": 1, "color": "red", "qty": 9, "vendor": ["A", "E"] } { "_id": 2, "color": "purple", "qty": 8, "vendor": ["B", "D", "F"], "rating": 5 } { "_id": 3, "color": "blue", "qty": 5, "vendor": ["A", "E"] } { "_id": 4, "color": "white", "qty": 6, "vendor": ["D"], "rating": 9 } { "_id": 5, "color": "yellow", "qty": 4, "vendor": ["A", "B"] } { "_id": 6, "color": "pink", "qty": 3, "vendor": ["C"] } { "_id": 7, "color": "green", "qty": 8, "vendor": ["C", "E"], "rating": 7 } { "_id": 8, "color": "black", "qty": 7, "vendor": ["A", "C", "D"] }
此数据使用以下 Kotlin 数据类进行建模:
data class PaintOrder( val id: Int, val qty: Int, val color: String, val vendor: List<String>, val rating: Int? = null )
比较操作符。
比较操作符根据与collection中的值的比较来查询数据。常见的比较操作符包括用于“大于”比较的gt()
lte()
、用于“小于或等于”比较的ne()
。
以下示例使用Filters.gt()
方法匹配collection中 值大于qty
7
paint_purchases
的所有文档:
val filter = Filters.gt("qty", 7) val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=1, qty=9, color=red, vendor=[A, E], rating=null) PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5) PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)
逻辑操作符
逻辑操作符使用应用于字段级操作符结果的逻辑来查询数据。 常见的逻辑操作符包括and()
(其中所有操作符必须为 true)和or()
(其中至少一个操作符必须为 true)。
以下示例使用Filters.and()
方法匹配qty
值小于或等于5
且color
值不是paint_purchases
collection中的"pink"
的文档:
val filter = Filters.and(Filters.lte("qty", 5), Filters.ne("color", "pink")) val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=3, qty=5, color=blue, vendor=[A, E], rating=null) PaintOrder(id=5, qty=4, color=yellow, vendor=[A, B], rating=null)
数组操作符
数组操作符根据数组字段中元素的值或数量查询数据。
以下示例使用Filters.size()
方法匹配collection中vendor
3
列表大小为paint_purchases
的文档:
val filter = Filters.size("vendor", 3) val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5) PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)
元素操作符
元素操作符根据字段的存在或类型查询数据。
以下示例使用Filters.exists()
方法匹配paint_purchases
集合中具有rating
的文档:
val filter = Filters.exists("rating") val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5) PaintOrder(id=4, qty=6, color=white, vendor=[D], rating=9) PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)
评估操作符
求值操作符查询有关更高级别逻辑的数据,例如正则表达式和文本搜索。
以下示例使用Filters.regex()
方法匹配collection中color
以字母"k"
paint_purchases
结尾的文档:
val filter = Filters.regex("color", "k$") val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=6, qty=3, color=pink, vendor=[C], rating=null) PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)
有关本指南中提及的运算符的更多信息,请参阅以下服务器手册条目: