通过LevelDB迭代

时间:2017-01-22 10:25:04

标签: javascript node.js leveldb

有人可以教我这个:

尝试在node.js实例中使用levelDb,以存储name密钥和ID字符串,我希望能够检查ID是否已经存在在DB中......

documentation我不知道自己做错了什么。

我在这里db.js

var level = require('level');  
var path = require('path');

var dbPath = process.env.DB_PATH || path.join(__dirname, 'mydb');  
var db = level(dbPath);

module.exports = db;

我希望能够查询数据库,所以我的基本尝试app.js在这里:

var db = require('./db', {
  valueEncoding: 'json'
})

db.put('name', 'ID001')
db.put('name', 'ID002')
db.put('name', 'ID003')
db.put('name', 'ID004')
db.put('name', 'ID005')
db.put('name', 'ID006')
db.put('name', 'ID007')

db.createReadStream()
  .on('data', function (entry) {
    console.log(entry.value);
  })

我以为我只是在数据库中获取最后一个值,但在重复运行之后我得到了这样的输出:

spences10:~/workspace/level-db $ node app.js
ID006
spences10:~/workspace/level-db $ node app.js
ID007
spences10:~/workspace/level-db $ node app.js
ID007
spences10:~/workspace/level-db $ node app.js
ID007
spences10:~/workspace/level-db $ node app.js
ID005
spences10:~/workspace/level-db $ node app.js
ID007
spences10:~/workspace/level-db $ node app.js
ID007
spences10:~/workspace/level-db $ node app.js
ID006
spences10:~/workspace/level-db $ node app.js
ID005
spences10:~/workspace/level-db $ node app.js
ID003
spences10:~/workspace/level-db $ node app.js
ID007

我只是希望能够遍历或查询数据库以查看是否需要将值放入其中。

我也尝试使用.get使用相同类型的结果

var db = require('./db', {
  valueEncoding: 'json'
})

db.put('name', 'ID001')
db.put('name', 'ID002')
db.put('name', 'ID003')
db.put('name', 'ID004')
db.put('name', 'ID005')
db.put('name', 'ID006')
db.put('name', 'ID007')

db.get('name', function(err, value) {  
  if (err) {
    return err;
  }
  console.log('value:', value);
});

...输出

spences10:~/workspace/level-db $ node app.js
value: ID007
spences10:~/workspace/level-db $ node app.js
value: ID004
spences10:~/workspace/level-db $ node app.js
value: ID005
spences10:~/workspace/level-db $ node app.js
value: ID007
spences10:~/workspace/level-db $ node app.js
value: ID003
spences10:~/workspace/level-db $ node app.js
value: ID007

1 个答案:

答案 0 :(得分:1)

delete(CloseCodes[event.code])函数是异步的,代码按顺序多次执行Object.defineProperty(...)操作。然后调用put将为您提供实际写入的最后一个值。这就是每次读取代码时都会得到不同输出的原因。

docs的示例中,您可以看到在put操作的回调中读取数据,以确保实际写入数据。

put