函数从MongoDB文档返回字段

时间:2016-09-19 20:56:16

标签: javascript node.js mongodb

我正在使用带有Node.js的MongoDB。我想创建一个函数,我可以调用一些基值的参数(以识别文档),然后我希望函数返回值的字段的名称。

我的文件如下:

{
    "name": "John Smith",
    "email": "john.smith@gmail.com",
    "phone": "555-0125"
}

我想调用这样的函数:

var phone_number = GetInfo({"name":"John Smith"}, "phone");
console.log(phone_number);   // This should output "555-0125"

如何使用MongoDB的Node.js驱动程序进行此操作。文档建议我需要采用面向回调或面向承诺的方法,但我不知道这些是什么意思。

2 个答案:

答案 0 :(得分:1)

这是documentation中提到的promise语法:

// Retrieve all the documents in the collection
collection.find().toArray(function(err, documents) {
  test.equal(1, documents.length);
  test.deepEqual([1, 2, 3], documents[0].b);

  db.close();
});

注意调用find()时,会返回Cursor Object,允许您过滤/选择/读取查询结果。由于find()是异步(延迟执行)调用,因此javascript必须附加将在find()的结果解析时执行的回调。

MDN还提供了有关Promise个对象的更多信息,以供进一步阅读:Promises

对于您的代码,您可以这样做:

// collection defined above this code snippet.
collection
  .findOne({"name":"John Smith"})
  .forEach(function(doc) { console.log(doc.phone) });

答案 1 :(得分:0)

您可以使用co generator。很容易理解它是如何工作的。

//your function call
var phone_number = GetInfo({"name":"John Smith"}, {"phone":1});

//your function description
function GetInfo(query, projection) {
  //using generator
  co(function*() {
    //connect to db
    let db = yield MongoClient.connect(url);
    let collectionName = db.collection(colName);
    collectionName.find(query, projection).toArray((err, doc)=> {
        if (err) console.log(err);
        //your data
        console.log(doc);
     return doc;
 }
db.close();
}

如果需要,您也可以使用本机回调