指定一个查询
概述
在本指南中,您可以学习如何在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 )
比较运算符
比较运算符基于与集合中值的比较来查询数据。常见的比较运算符包括 gt()
用于“大于”比较,lte()
用于“小于或等于”比较,以及 ne()
用于“不等于”比较。
以下示例使用 Filters.gt()
方法匹配所有在 paint_purchases
集合中 qty
值大于 7
的文档。
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()
(所有运算符都必须为真)和 or()
(至少有一个运算符必须为真)。
以下示例使用 Filters.and()
方法匹配在 paint_purchases
集合中 qty
的值小于或等于 5
且 color
的值不是 "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()
方法匹配在 paint_purchases
集合中 vendor
列表的大小为 3
的文档。
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()
方法匹配具有以字母 "k"
结尾的 color
的文档,这些文档位于 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)
有关本指南中提到的运算符的更多信息,请参阅以下服务器手册条目