2016-07-29 52 views
3

它必須是一個很簡單的問題,但我不能找到一個方法來做到這一點...Node.js:如何知道某個值是否在MongoDB數據庫的集合中?

我的證件,我可以以JSON格式像這樣代表一個非常基本的MongoDB集合:

myDatabase.myCollection = { 
    {hashkey: "hashkey1", 
    data: "someData" 
    }, 
    {hashkey: "hashkey2", 
    data: "someData" 
    }, 
    {hashkey: "hashkey3", 
    data: "someData" 
    } 
} 

每個hashkey值是唯一的。

現在,我想寫下面的代碼中的Node.js:

// I use npm mongodb, sounds good ? 
var mongodb = require('mongodb'); 

// initiating connection to myDatabase... 

var db = "my_database_I_just_connected_to"; 
var myCollection = db.collection('myCollection'); 

var newHashkey = "hashkeyX"; 

if ("newHashkey_is_already_in_myCollection") { 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 

我正在尋找一種方式來獲得布爾「newHashkey_is_already_in_myCollection」。使用我的例子數據庫:

  • 如果 「hashkeyX」 === 「hashkey1」 ------>真正
  • 如果 「hashkeyX」 === 「hashkey5」 ------>假

我一定是失明的,但是我找不到一個直接的功能。我已經嘗試了很多使用選擇器的方法,計算返回的文檔,試圖理解遊標與對象......不會這樣做。我最初的想法是:

if (myCollection.findOne({hashkey: "hashkeyX"}) === null) { 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 

1)什麼是得到這樣一個布爾值的好/最好的方法?

2)[可選:]你能聯繫我了有關此類問題的一些很好的解釋?

回答

3

findOne是一個異步操作,必須使用回調,檢查對象存在:

myCollection.findOne({hashkey: "hashkeyX"}, function(err, obj) { 
    if (err) { 
    // TODO: process error 
    } 
    if (obj) { 
    doSomething(); 
    } else { 
    doSomethingElse(); 
    } 
+0

這將是合乎邏輯的。作爲Node新手,我經常犯回調錯誤......那麼其他答案呢?將無法工作? –

+1

檢查它可以幫助的官方node.js mongodb文檔:https://docs.mongodb.com/getting-started/node/client/ – alexmac

+0

異步是強大的,美麗的,需要我改變我的想法......它完美地工作,並感謝鏈接,我只有npm mongodb自述...非常感謝! –

0

如果你能代表這樣的數據:

myDatabase.myCollection = { 
    "hashkey1": { 
    data: "someData" 
    }, 
    "hashkey2": { 
    data: "someData" 
    }, 
    "hashkey2": { 
    data: "someData" 
    } 
} 

然後,你可以做這樣的事情:

if (db.collection(newHashkey)) { 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 
+0

我不明白「.myCollection(newHashkey)」。它應該在Node.js/mongodb模塊中工作嗎? –

+0

我沒有按照我想要的方式寫。我糾正了它。 – Tsangares