6

我正在学习 MEAN 堆栈教程。它包含以下代码作为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 操作的文档,但找不到对它的引用。.findMongo操作的标准语法似乎是collection.find({},{}).someCursorLimit(). 我在操作中没有看到对第三个参数的引用.find,为什么这里允许一个?

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

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

任何澄清将不胜感激!

4

1 回答 1

12

第一个参数是查询。

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

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

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

第三个参数是查询完成后调用的回调函数。function(e, docs)是 node.js 语法的 mongodb 驱动程序。第一个参数e是错误。docs是匹配文档的数组。如果发生错误,则在 中给出e。如果查询成功,则在第二个参数中给出匹配的文档docs(名称可以是您想要的任何名称)。

游标有多种方法可用于在 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 个文档。

所有这些东西都在文档中给出。由于功能和受欢迎程度,我认为最好使用猫鼬而不是本机驱动程序。

于 2014-08-03T19:06:45.087 回答