【问题标题】:Searching with multiple values in YDN-DB在 YDN-DB 中搜索多个值
【发布时间】:2015-02-14 08:37:05
【问题描述】:

是否可以在 YDN-DB 中找到多个值(如 sql IN 关键字)?

    //simple scenario
    "SELECT * FROM categories WHERE code IN ('AB','CD','EF','GH','IJ','KL');" 

    var code = "'AB','CD','EF','GH','IJ','KL'";
    var key_range = ydn.db.KeyRange.only(code);     
    cacheDb.values('categories','code',key_range).then(function(record){
        console.log(record);            
    },function(e){
        console.log(e);
    });

【问题讨论】:

    标签: javascript ydn-db


    【解决方案1】:

    您可以使用多查询方法,如最近更新的tutorial 中所述。

    基本上,您将为 IN 子句的每个元素创建迭代器并连接(联合)结果,如下所示:

    var keys = [];
    var multiQuery = function(sec_keys, pri_keys) {
      var advance = [];
      var cmp = ydn.db.cmp(pri_keys[0], pri_keys[1]);
      if (cmp == 1) { // pri_keys[0] > pri_keys[1]
        if (keys[keys.length - 1] != pri_keys[1]) {
          keys.push(pri_keys[1]);
        }
        advance[1] = true; // advance iter_1 on step
      } else if (cmp == -1) { // pri_keys[0] < pri_keys[1]
        if (keys[keys.length - 1] != pri_keys[0]) {
          keys.push(pri_keys[0]);
        }
        advance[1] = true; // advance iter_1 on step
      } else { // pri_keys[0] == pri_keys[1]
        if (keys[keys.length - 1] != pri_keys[0]) {
          keys.push(pri_keys[0]);
        }
        advance[0] = true; // advance iter_0 on step
        advance[1] = true; // advance iter_1 on step
      }
    
      if (keys.length >= 10) {
        return [];
      } else {
        return advance;
      }
    };
    

    然后使用scan方法:

    db.scan(multiQuery, [iterators...]).done(function() {
      db.values('article', keys).done(function(values) {
        console.log(keys, values);
      })
    });
    

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 2014-08-06
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多