假设我在云数据库中有数据:
{
"_id": "KJhsdas8d79782",
"params": ["A", "B", "C"]
}
{
"_id": "KJhsdas8d79783",
"params": ["D", "E", "F"]
}
我现在有查询条件: ["A", "B", "C", "D", "E"], 我希望查询params同时包含查询条件里面的所有元素的数据,也就是说案例中只有第一条数据满足。应该如何查询呢?
目前看到文档中只有in和all的api,in是只要包含就查询命中, all是需要完全匹配才能查询命中。
要在云数据库中查询数组中完全包含指定查询条件的数据中的所有元素,可以使用
$all
操作符。这个操作符可以用来检查数组字段中是否包含所有指定的元素。以下是一个示例代码,展示了如何在云函数环境下使用
$all
操作符来查询数组中完全包含指定条件的数据:const tcb = require('@cloudbase/node-sdk'); const app = tcb.init({ env: 'your-env-id' // 替换为你的环境ID }); const db = app.database(); const _ = db.command; db.collection('your-collection-name') // 替换为你的集合名称 .where({ tags: _.all(['cloud', 'database']) // 查询 tags 数组字段同时包含 'cloud' 和 'database' 的记录 }) .get({ success: res => { console.log(res.data); }, fail: err => { console.error(err); } });
在这个示例中:
your-env-id
需要替换为你的云开发环境ID。your-collection-name
需要替换为你要查询的集合名称。tags
是数组字段的名称,['cloud', 'database']
是你要查询的元素。通过这种方式,你可以查询到数组中完全包含指定查询条件的数据中的所有元素。
有办法处理吗?
不是这样就可以吗
db.collection('XXX').where({
params: _.all(['A', 'B','C','D','E'])
})
params:_.all(_.in(["A", "B", "C", "D", "E"]))
会报错:RuntimeError: error while executing function get: TypeError: e.operands.map is not a function (from line 5, col 4 to line 5, col 7)