SequoiaDB 简介
安装部署
数据库实例
分布式引擎
SAC 管控中心
参考手册
常见问题及解答(FAQ)
版本信息
findOne - 查询符合条件的一条记录
db.collectionspace.collection.findOne([cond], [sel])
db.collectionspace.collection.findOne([cond], [sel]).hint([hint])
db.collectionspace.collection.findOne([cond], [sel]).skip([skipNum]).limit([retNum]).sort([sort])
db.collectionspace.collection.findOne([SdbQueryOption])
SdbCollection
该函数用于返回符合查询条件的一条记录,与 find() 方法用法相同。
参数说明可参考 find() 方法。
函数执行成功时,将返回一个 SdbQuery 的对象。通过该对象获取查询到的结果集。
函数执行失败时,将抛异常并输出错误信息。
findOne()
函数常见异常如下:
错误码 | 错误类型 | 可能发生的原因 | 解决办法 |
---|---|---|---|
-2 | SDB_OOM | 无可用内存 | 检查物理内存及虚拟内存的设置及使用情况 |
-6 | SDB_INVALIDARG | 参数错误 | 查看参数是否填写正确 |
-34 | SDB_DMS_CS_NOTEXIST | 集合空间不存在 | 检查集合空间是否存在 |
-23 | SDB_DMS_NOTEXIST | 集合不存在 | 检查集合是否存在 |
当异常抛出时,可以通过 getLastErrMsg() 获取错误信息或通过 getLastError() 获取错误码。更多错误处理可以参考常见错误处理指南。
v3.4 及以上版本
查询所有记录,不指定 cond 和 sel 字段
> db.sample.employee.findOne()
查询匹配条件的记录,即设置 cond 参数的内容,如下操作返回集合 employee 中符合条件 age 字段值大于 25 且 name 字段值为"Tom"的记录
> db.sample.employee.findOne({age: {$gt: 25}, name: "Tom"})
指定返回的字段名,即设置 sel 参数的内容,如有记录 {age: 25, type: "system"} 和 {age: 20, name: "Tom", type: "normal"},如下操作返回记录的 age 字段和 name 字段
> db.sample.employee.findOne(null, {age: "", name: "" }) { "age": 25, "name": "" }
使用索引 ageIndex 遍历集合 employee 下存在 age 字段的记录,并返回
> db.sample.test.findOne({age: {$exists: 1}}).hint({"": "ageIndex"}) { "_id": { "$oid": "5812feb6c842af52b6000007" }, "age": 10 }
返回集合 employee 中 age 字段值大于 20 的记录(如使用 $gt 查询),设置只返回记录的 name 和 age 字段,并按 age 字段值的升序排序
> db.sample.employee.findOne({age: {$gt: 20}}, {age: "", name: ""}).sort({age: 1})
通过 findOne() 方法,我们能任意选择我们想要返回的字段名,在上例中我们选择了返回记录的 age 和 name 字段,此时用 sort() 方法时,只能对记录的 age 或 name 字段排序。而如果我们选择返回记录的所有字段,即不设置 findOne 方法的 sel 参数内容时,那么 sort() 能对任意字段排序。
指定一个无效的排序字段
> db.sample.employee.findOne({age: {$gt: 20}}, {age: "", name: ""}).sort({"sex": 1})
因为“sex”字段并不存在 findOne() 方法的 sel 选项 {age: "", name: ""} 中,所以 sort() 指定的排序字段 {"sex": 1} 将被忽略。