云开发数据库复杂条件怎么查询并更新?
发布于 6 年前 作者 jun97 548 次浏览 来自 问答

云开发大佬们,请教一个问题,假设数据库有三条记录:

记录一’key’:‘a’,‘value’:‘1’

记录二’key’:‘b’,‘value’:‘2’

记录三’key’:‘c’,‘value’:‘3’

现在想完成一次查询并更新,思路是:如果想要更新的’key’值或’value’值等于本身或没有记录的值,就更新,如果等于其他已有记录的值,就不更新,如何查询?

举例:如果我想更新’key’:‘a’,‘value’:'1’这条记录,'key’值为a或def…或者’value’值为1或456就更新,'key’值为b或c 或者 'value’值为2或3就不更新。

扩展:我知道写一堆if else条件也可以,但是太麻烦,有没有一种简写查询方法?或者说首先屏蔽掉自己原先的值,让'key':'a','value':'1'不参与查询,我用where(_.or([{key: ''}, {value: ''}]))方法,''填入查询值,只要返回长度!==0,就提示有该记录,长度===0,就更新,就是想问有没有这种屏蔽本身再查询的方法?是用where方法?还是有别的写法?

请赐教




1 回复

感觉有点绕,或者业务本身有点绕,或者你用了一种有点绕的数据结构去满足业务。总之不太明白你的意思,先这样写你看看有用吗?

let keyArray = ['a', 'b', 'c']
let valueArray = [1, 2, 3]

let theKey = 'a', theValue = 1
let keyArrayForQuery = keyArray.splice(keyArray.indexOf(theKey), 1)
let valueArrayForQuery = valueArray.splice(valueArray.indexOf(theValue), 1)

...where({
	key: _.nin(keyArrayForQuery)
	value: _.nin(valueArrayForQuery)
}).update...

回到顶部