我正在通过MEAN stack tutorial。它包含以下代码作为index.js
中的路由。我的Mongo集合的名称是brandcollection
。
/* GET Brand Complaints page. */
router.get('/brands', function(req, res) {
var db = req.db;
var collection = db.get('brandcollection');
collection.find({},{},function(e,docs){
res.render('brands', {
"brands" : docs
});
});
});
我想修改此代码,但我不完全了解如何调用.find
方法。具体来说,我有以下问题:
将哪些对象作为参数传递给function(e, docs)
?
function(e, docs)
是MongoDB语法的一部分吗?我查看了有关Mongo CRUD操作的文档,但无法找到它的引用。似乎Mongo .find
操作的标准语法是collection.find({},{}).someCursorLimit()
。我没有在.find
操作中看到对第三个参数的引用,为什么一个允许在这里?
如果function(e, docs)
不是MongoDB操作,它是否是Monk API的一部分?
从教程中可以清楚地看到,这段代码返回集合中的所有文档,并将它们作为名为" brands的属性放置在对象中。"但是,function(e, docs)
在该过程中具体扮演什么角色?
非常感谢任何澄清!
答案 0 :(得分:12)
第一个参数是查询。
第二个参数(可选)是投影,即如果要限制匹配文档的内容
collection.find( { qty: { $gt: 25 } }, { item: 1, qty: 1 },function(e,docs){})
意味着只获取匹配文档中的item
和qty
字段
第三个参数是在查询完成后调用的回调函数。 function(e, docs)
是node.js语法的mongodb驱动程序。第一个参数e
是错误。 docs
是匹配文档的数组。如果发生错误,则在e
中给出。如果查询成功,匹配的文档将在第二个参数docs
中给出(名称可以是您想要的任何名称)。
cursor有各种方法可用于在mongoDB返回之前操作匹配的文档。 collection.find({qty:{$ gt:25}},{item:1,qty:1}) 是一个游标,你可以对它进行各种操作。
collection.find( { qty: { $gt: 25 } }, { item: 1, qty: 1 }).skip(10).limit(5).toArray(function(e,docs){
...
})
意味着您将跳过前10个匹配的文档,然后返回最多5个文档。