RethinkDB - 如何通过查询获取单个文档?
RethinkDB - how to get a single document by query?
如何在RethinkDB中只查询一个文档?
例如,我想通过以下查询获取文档:
let searchQuery = {
name: 'rob'
}
var cursor = await r.table('users').filter(searchQuery).run(connection)
var user = await cursor.toArray()
console.log(user)
结果:
[ { email: 'fooz@bar.com',
id: '00e18124-714b-4298-aa34-5126ebda8828',
name: 'rob' } ]
Filter method 实际上 returns 同名 list of users
- 'rob'.
我想要这样的结果 get
method:
r.table('posts').get('a9849eef-7176-4411-935b-79a6e3c56a74').run(conn, callback);
结果:
{ email: 'fooz@bar.com',
id: '00e18124-714b-4298-aa34-5126ebda8828',
name: 'rob' }
但此方法仅需要文档ID。
有什么想法吗?
get
(按 id)按设计获取单行选择,但 filter
是处理多个值(如数组和流)的流式操作。您可能想使用 nth
that's designed to query for a stream/array element by its position, or its close alternative ()。这是一个例子:
.filter({ name: 'rob' })`
将return一个像
这样的数组
[{"email":"fooz@bar.com","id":"230de013-5d6a-436e-a7e9-a891c01913e5","name":"rob"}]
但是下面的查询
.filter({ name: 'rob' }).nth(0)
.filter({ name: 'rob' })(0)
都会return
{"email":"fooz@bar.com","id":"230de013-5d6a-436e-a7e9-a891c01913e5","name":"rob"}
请注意,如果找不到行,两者也会抛出 ReqlNonExistenceError: Index out of bounds: 0
。但是,您可以使用 default
运算符轻松修复它:
.filter({ name: 'not-rob' }).nth(0).default(null)
使用 RethinkDB 数据浏览器进行测试,"Raw view" 选项卡处于活动状态,因为 "Tree view" 和 "Table view" 都将单元素数组显示为单个对象。我几乎可以肯定 RethinkDB 查询引擎足够聪明,可以使使用 nth(0)
更加高效,而不是将整个游标提取到数组并在代码中获取后者的第一个元素。
如何在RethinkDB中只查询一个文档?
例如,我想通过以下查询获取文档:
let searchQuery = {
name: 'rob'
}
var cursor = await r.table('users').filter(searchQuery).run(connection)
var user = await cursor.toArray()
console.log(user)
结果:
[ { email: 'fooz@bar.com',
id: '00e18124-714b-4298-aa34-5126ebda8828',
name: 'rob' } ]
Filter method 实际上 returns 同名 list of users
- 'rob'.
我想要这样的结果 get
method:
r.table('posts').get('a9849eef-7176-4411-935b-79a6e3c56a74').run(conn, callback);
结果:
{ email: 'fooz@bar.com',
id: '00e18124-714b-4298-aa34-5126ebda8828',
name: 'rob' }
但此方法仅需要文档ID。
有什么想法吗?
get
(按 id)按设计获取单行选择,但 filter
是处理多个值(如数组和流)的流式操作。您可能想使用 nth
that's designed to query for a stream/array element by its position, or its close alternative ()。这是一个例子:
.filter({ name: 'rob' })`
将return一个像
这样的数组[{"email":"fooz@bar.com","id":"230de013-5d6a-436e-a7e9-a891c01913e5","name":"rob"}]
但是下面的查询
.filter({ name: 'rob' }).nth(0)
.filter({ name: 'rob' })(0)
都会return
{"email":"fooz@bar.com","id":"230de013-5d6a-436e-a7e9-a891c01913e5","name":"rob"}
请注意,如果找不到行,两者也会抛出 ReqlNonExistenceError: Index out of bounds: 0
。但是,您可以使用 default
运算符轻松修复它:
.filter({ name: 'not-rob' }).nth(0).default(null)
使用 RethinkDB 数据浏览器进行测试,"Raw view" 选项卡处于活动状态,因为 "Tree view" 和 "Table view" 都将单元素数组显示为单个对象。我几乎可以肯定 RethinkDB 查询引擎足够聪明,可以使使用 nth(0)
更加高效,而不是将整个游标提取到数组并在代码中获取后者的第一个元素。