2016-07-29 45 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