作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以告诉我这个吗:
尝试在node.js实例中使用levelDb来存储name
键和ID
字符串,我希望能够检查ID
已经在数据库中,所以...
查看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
最佳答案
put
函数是异步的,代码会按顺序多次执行 put
操作。然后调用 get
为您提供实际写入的最后一个值。这就是为什么每次阅读运行代码时都会得到不同的输出。
在 docs 的示例中您可以看到在 put 操作的回调中读取了数据,以确保数据确实被写入。
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)
})
})
关于javascript - 遍历 LevelDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789786/
我是一名优秀的程序员,十分优秀!