CouchDB按日期过滤

时间:2017-07-26 11:10:22

标签: android couchdb couchbase-lite

使用Android使用CouchDB CouchBase Lite device_number我正在尝试复制数据库我也使用过滤器来获取名称为"1": "function(doc, req) { if(doc.ismaster || doc._deleted) return false; if( 1 == doc.device_num || 22 == doc.device_num || 25 == doc.device_num || 41 == doc.device_num ) return true; else return false;}", 的字段的文档 所以我有这个过滤器:

 "1": "function(doc, req) {
      if(doc.ismaster || doc._deleted)
    return false; 
      if( 22 == doc.device_num && 21 == doc.device_num && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <= 60) )
    return true;
      else 
    return false;}", 

它工作得很好,我得到了设备的所有文件:1,2,25,41 那么现在我想得到device_num = 22和21的文件,其creation_date从现在起不到60天,所以我这样做:

 app.post('/create', function (req, res) {

  var playbook = new Ansible.Playbook().playbook("m2install");
    playbook.on('stdout', function (data) {
        console.log(data.toString());
    });
    playbook.on('stderr', function (data) {
        console.log(data.toString());
    });
    var command = playbook.inventory('inventories/M2Install/hosts').verbose('v');
    var promise = command.exec();
    promise.then(function (successResult) {
        tmp += "Create Magento Setup";
        tmp += successResult.output;
        fs.unlink('roles/install/vars/main.yml', function (err) {
            if (!err) {
                console.log('delete docker_variables.yml file ');
            } else {
                console.log('Not delete docker_variables.yml file');
            }
        });
        res.render("result", {data: tmp, title: "Magento Setup  Report"});
    }, function (error) {
        tmp += error;
        res.render("result", {data: tmp, title: "Magento Setup  Report"});
    });

  });


  app.post('/setup', function (req, res) {

      postcount = Object.keys(req.body).length
      console.log(postcount);

      for (var key in req.body) {

          console.log(req.body[key]);

          if (req.body[key] == "create") {
              res.render('create', {title: 'Magento Setup Form'});
              sucesscount++;
          }
          });

但我没有得到结果,0个文件,并且不是真的,因为在数据库中有少于60天的文件。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

我想获取device_num = 22和21以及其中的文档   creation_date从现在起不到60天

英文措辞:“我想要21 22的文件”实际上是“我会接受任何文件,其中该文件适用于21 22”:< / p>

       if( (22 == doc.device_num || 21 == doc.device_num) && ...)

因为没有带有单个device_num的文档可以同时用于设备21和22。

世界各地的日期有点混乱,谁知道你的用户是否在同一时区? Couchdb提供some examples考虑​​日期中的校对因子,以下是使用number类型进行安全校对的示例:

 // creation:
 {tstamp:+new Date(), device_num:22, ...}
 // test
 validstamp = +new Date() - 1000*60*60*24*60;
 if( (22 == doc.device_num || 21 == doc.device_num) && Number(doc.tstamp) > validstamp)
     ...

如果存储中出现问题并且存储了字符串,那么很高兴使用Number()。但作为数字,它们在逻辑上是连续的,没有奇怪的非零填充字符串在20世纪80年代早期和遥远的未来,你可以稍后重构使用芒果索引:

{
  "tstamp": {'$gt':validstamp},
  "$or": [
      { "device_num": 21 },
      { "device_num": 22 }
  ]
}