2017-01-22 61 views
0

可有人請教育我這個:迭代通過性LevelDB

試圖用性LevelDB在node.js的情況下,存儲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 

回答

1

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) 
    }) 
}) 
+0

謝謝,我確實嘗試過使用它,但它只會返回剛剛放入db中的內容?我誤解了這個?所以這個想法是輸入關鍵字+值,然後立即得到你剛纔輸入的值?我希望能夠看到是否有一個id,所以'get('name','valueOfKeyValuePair'{console.log('yes that value is there')}) – spences10

+0

對於示例代碼是的,它將返回剛纔你輸入的內容。對於作爲服務運行的實際應用程序,當它響應用戶請求時執行「put」操作,可以使用get來檢查密鑰的值,你會得到最後寫入的值。 – cjungel

+0

然後我錯過了一些東西,我希望能夠將值添加到數據庫中。在稍後的一點,我想檢查一下,看看我的值是否已經被添加,所以在提供的示例中,我必須將它添加到數據庫中,然後檢查是否剛剛添加它? – spences10