Node.js:如何知道某个值是否在MongoDB数据库的集合中?

时间:2016-07-29 20:47:46

标签: javascript node.js mongodb

这一定是一个非常简单的问题,但我无法找到办法......

我有一个非常基本的MongoDB文档集合,我可以用这样的JSON格式表示:

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"。使用我的示例数据库:

  • if" hashkeyX" ===" hashkey1" ------>真
  • if" hashkeyX" ===" hashkey5" ------>假

我必须是盲目的,但我无法为此找到直接的功能。我已经尝试了许多使用选择器的方法,计算返回的文档,试图理解游标与对象......不管怎样。我最初的想法是:

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

1)获得这样一个布尔值的好/最佳方法是什么?

2)[可选:]你能否将我与这些问题的一些好的解释联系起来?

2 个答案:

答案 0 :(得分:3)

findOne是一个异步操作,你必须使用回调并检查那里是否存在对象:

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

答案 1 :(得分:0)

如果你能代表这样的数据:

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

然后你可以这样做:

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