收藏
回答

请问云数据库中如何查询数组中完全包含指定查询条件的数据中的所有元素?

假设我在云数据库中有数据:

{
    "_id": "KJhsdas8d79782",
    "params": ["A", "B", "C"]
}
{
    "_id": "KJhsdas8d79783",
    "params": ["D", "E", "F"]
}


我现在有查询条件: ["A", "B", "C", "D", "E"], 我希望查询params同时包含查询条件里面的所有元素的数据,也就是说案例中只有第一条数据满足。应该如何查询呢?

目前看到文档中只有in和all的api,in是只要包含就查询命中, all是需要完全匹配才能查询命中。



最后一次编辑于  10-10
回答关注问题邀请回答
收藏

4 个回答

  • 云开发小助手CloudBase
    云开发小助手CloudBase
    10-15

    要在云数据库中查询数组中完全包含指定查询条件的数据中的所有元素,可以使用 $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'] 是你要查询的元素。

    通过这种方式,你可以查询到数组中完全包含指定查询条件的数据中的所有元素。


    10-15
    有用
    回复 1
    • 寞丶释
      寞丶释
      10-17
      但是你这样只能查询到tags为:['cloud', 'database']的纪录,   我希望的是:查询条件是:['cloud', 'database', 'memery', 'server'], 查出所有必须包含在这4个参数以内的数据,例如tags为:['cloud', 'database'] 、['cloud', 'database', 'memery'] 都可以命中,但是 tags为:['cloud', 'other'] 的不能命中
      10-17
      回复
  • 寞丶释
    寞丶释
    10-14

    有办法处理吗?

    10-14
    有用
    回复
  • showms
    showms
    10-11

    不是这样就可以吗

    db.collection('XXX').where({

      params: _.all(['A', 'B','C','D','E'])

    })

    10-11
    有用
    回复 1
    • 寞丶释
      寞丶释
      10-11
      不行,all只能匹配完全一致的,比如_.all(['A', 'B','C','D','E']), 他就只能查询出 ['A', 'B','C','D','E']的值,多一个少一个都不能匹配
      10-11
      回复
  • 跨商通
    跨商通
    10-10
    params:_.all(_.in(arr))
    
    10-10
    有用
    回复 1
    • 寞丶释
      寞丶释
      10-10
      这样的语法好像有问题,
      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)
      10-10
      回复
登录 后发表内容