我正在使用带有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驱动程序进行此操作。文档建议我需要采用面向回调或面向承诺的方法,但我不知道这些是什么意思。
答案 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();
}
如果需要,您也可以使用本机回调