在Monk上使用MongoDB集合上的find方法

时间:2014-08-03 18:42:25

标签: node.js mean-stack node-mongodb-native monk

我正在通过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方法。具体来说,我有以下问题:

  1. 将哪些对象作为参数传递给function(e, docs)

  2. function(e, docs)是MongoDB语法的一部分吗?我查看了有关Mongo CRUD操作的文档,但无法找到它的引用。似乎Mongo .find操作的标准语法是collection.find({},{}).someCursorLimit()。我没有在.find操作中看到对第三个参数的引用,为什么一个允许在这里?

  3. 如果function(e, docs)不是MongoDB操作,它是否是Monk API的一部分?

  4. 从教程中可以清楚地看到,这段代码返回集合中的所有文档,并将它们作为名为" brands的属性放置在对象中。"但是,function(e, docs)在该过程中具体扮演什么角色?

  5. 非常感谢任何澄清!

1 个答案:

答案 0 :(得分:12)

第一个参数是查询。

第二个参数(可选)是投影,即如果要限制匹配文档的内容

collection.find( { qty: { $gt: 25 } }, { item: 1, qty: 1 },function(e,docs){})

意味着只获取匹配文档中的itemqty字段

第三个参数是在查询完成后调用的回调函数。 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个文档。

所有这些内容都在the docs中给出。我认为最好使用mongoose而不是本机驱动程序,因为功能和受欢迎程度。