gpt4 book ai didi

javascript - 遍历 LevelDB

转载 作者:行者123 更新时间:2023-12-03 05:11:42 25 4
gpt4 key购买 nike

有人可以告诉我这个吗:

尝试在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com