uni-app 不能同时使用两个数据库操作符吗?
uni-app 不能同时使用两个数据库操作符吗?
示例代码:
以下代码运行报错: JQL语法暂不支持使用更新操作符
await db.collection('class')
.where({
_id: db.command.in(incList) // 查询所有ID对应的课件详情
}).update({
used:db.command.inc(1)
});
以下代码执行没问题
await db.collection('class')
.where({
_id: db.command.in(incList) // 查询所有ID对应的课件详情
}).update({
used:1
});
操作步骤:
每次模拟运行小程序都会报错
预期结果:
语句顺利执行,给一组数据的used
值增加1。
实际结果:
报错,并提示JQL语法暂不支持使用更新操作符
bug描述:
在传统方式操作数据库时,where
语句使用db.command.in
查找一组记录,update
语句使用db.command.inc
为这组记录的某个字段增1,结果执行时报错:JQL语法暂不支持使用更新操作符。其实没使用JQL语法而是传统的方式,update
语句使用db.command.inc
改为直接给字段赋值就没报错了,但是不能满足需要,请问怎么回事?是不是BUG?
你在前端操作的把?前端操作都是JQL,需要在云函数中操作数据库
是的,这是什么奇怪的规定
回复 systhinker: 前端操作用的就是JQL, JQL暂不支持使用更新操作符
在 uni-app
中,确实可以同时使用多个数据库操作符来进行复杂的数据查询。uni-app
提供了基于 SQLite 的数据库 API,可以通过 uni.db
对象来操作数据库。尽管它的查询语法可能不如 SQL 那样丰富,但你可以通过组合多个操作符来实现复杂的查询需求。
以下是一个示例,展示如何在 uni-app
中同时使用两个数据库操作符进行查询。假设我们有一个名为 users
的表,其中包含 age
和 name
两个字段,我们想要查询年龄大于 25 且名字包含 “John” 的用户。
首先,确保你的数据库中已经有一个 users
表,并插入一些测试数据:
// 初始化数据库表和数据
uni.db.open({
success: function () {
uni.db.createTable({
sql: 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)',
success: function () {
uni.db.exec({
sql: 'INSERT INTO users (name, age) VALUES ("John Doe", 30), ("Jane Smith", 22), ("Johnny Appleseed", 28)',
success: function () {
console.log('Table and data initialized.');
}
});
}
});
}
});
接下来,我们编写一个查询,该查询将同时使用两个操作符:>
和 LIKE
:
// 查询年龄大于25且名字包含"John"的用户
uni.db.select({
table: 'users',
where: 'age > ? AND name LIKE ?',
values: [25, '%John%'],
success: function (res) {
console.log('Query result:', res.result.rows);
// 处理查询结果
res.result.rows.forEach(function (row) {
console.log('ID:', row.id, 'Name:', row.name, 'Age:', row.age);
});
},
fail: function (err) {
console.error('Query failed:', err);
}
});
在这个示例中,where
子句使用了 AND
逻辑操作符来组合两个条件:age > ?
和 name LIKE ?
。values
数组提供了这些条件的参数值,分别是 25
和 '%John%'
。
通过这种方式,你可以在 uni-app
中同时使用多个数据库操作符来执行复杂的查询。请确保你的查询语法和操作符的使用符合 SQLite 的规范,以便获得正确的查询结果。