这个createReadStream如何过滤时间值?

时间:2015-07-05 07:22:39

标签: javascript node.js leveldb

我正在尝试理解来自this Github repo的代码,并且我坚持使用这个特定代码:

#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var minimist = require('minimist');
var level = require('level');
var strftime = require('strftime');
var through = require('through');
var editor = require('editor');
var stringify = require('json-stable-stringify');
var os = require('os');
var tmpdir = (os.tmpdir || os.tmpDir)();

var HOME = process.env.HOME || process.env.USERPROFILE;
var datadir = path.join(HOME, '.clocker');
mkdirp.sync(datadir);

var db = level(path.join(datadir, 'db'), { encoding: 'json' });

# [...]
# *SNIPP*
# [...]

    var s = db.createReadStream({
        gt: 'time!', lt: 'time!~',
        limit: 1, reverse: true
    });

我知道这个createReadStream会根据传递给createReadStream的对象字面值从数据库中获取一些记录。
我不明白的是:'time!''time!~'做了什么?它们是字符串文字,所以我猜他们会告诉关卡引擎做某事或假设某些值?

可悲的是,我没有找到任何可以帮助我的文件。

你能帮我理解这个片段里发生了什么吗? 此外,如果您有关于这些参数的文档链接(遗憾的是,我不知道如何搜索它们),我会很高兴。

1 个答案:

答案 0 :(得分:0)

考虑一下ASCII,

考虑字符串时间!和时间!〜

如果你看一下 http://www.asciitable.com/

你会注意到〜是126,而且!是33

所有非空间特殊和字母数字ascii字符落入之间的空间!和〜,所以代码真的只是在时间之间过滤!和时间!〜

e.g。 timea timeb timec将落入此范围 (编辑:我搞砸了平等的方向,不应该包含在匹配的字符串中)