首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历LevelDB

遍历LevelDB
EN

Stack Overflow用户
提问于 2017-01-22 18:25:04
回答 1查看 2.2K关注 0票数 0

有人能告诉我这一点吗:

尝试在node.js实例中使用levelDb,以针对它存储name密钥和ID字符串,我希望能够检查ID是否已经在数据库中,因此...

看着documentation,我不知道我做错了什么。

我这里有db.js

代码语言:javascript
复制
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中的初步尝试如下:

代码语言:javascript
复制
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);
  })

我以为我只得到了db中的最后一个值,但在重复运行它之后,我得到了如下输出:

代码语言:javascript
复制
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

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

我也尝试过使用.get,也得到了同样的结果

代码语言:javascript
复制
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);
});

输出...

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-01-22 20:27:47

put函数是异步的,代码会连续多次执行put操作。然后,调用get会给出实际写入的最后一个值。这就是为什么您每次阅读运行代码时都会得到不同的输出。

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

代码语言:javascript
复制
var levelup = require('levelup')

// 1) Create our database, supply location and options.
//    This will create or open the underlying LevelDB store.
var db = levelup('./mydb')

// 2) put a key & value
db.put('name', 'LevelUP', function (err) {
  if (err) return console.log('Ooops!', err) // some kind of I/O error

  // 3) fetch by key
  db.get('name', function (err, value) {
    if (err) return console.log('Ooops!', err) // likely the key was not found

    // ta da!
    console.log('name=' + value)
  })
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41789786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档