MongoDB文档中的歧义-Model.find()

时间:2018-07-11 10:11:41

标签: javascript node.js mongodb mongoose

所以我正在做this tutorial,并在步骤 5。它说

为通过Restful API创建访问图书数据的路径
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Book = require('../models/Book.js');

/* GET ALL BOOKS */
router.get('/', function(req, res, next) {
  Book.find(function (err, products) {//this is the line I'm having trouble understanding
    if (err) return next(err);
    res.json(products);
  });
});

我不理解的是,如果我正确地阅读了Mongoose.find() documentation,那么在传递回调函数之前,至少需要传递一个“ options”强制性参数。这似乎跳过了必填参数。

教程与文档不一致吗?

我尝试过的事情:

修订文档@ https://github.com/Automattic/mongoose/blob/master/History.md

但是没有提到第一个第一个参数的可选性。

2 个答案:

答案 0 :(得分:1)

Mongoose在.find()中构建一个MongoDB Book.find()查询,如果您look at Mongoose source,您将看到Model.find检查{{1 }}是一个函数,如果是,则将该函数作为第1566行中的MongoDB查询构建器的回调传递。

这样,一个空的find对象将由Mongoose连同回调一起传递给MongoDB conditions函数,该回调将返回您案例中的所有书籍。

答案 1 :(得分:1)

redraw是可选的,因此不必强制传递,但是文档中的语句[options]看起来与实际的The conditions are cast to their respective SchemaTypes before the command is sent.函数不一致。

  
    

.find()

         

Model.find()

         

Parameters

         

conditions «Object»可选字段,请返回[projection] «Object|String»

         

Query.prototype.select()可选,请参阅Query.prototype.setOptions()

         

[options] «Object»     返回值:     «查询»     查找文档

         

在发送命令之前,将条件强制转换为其各自的SchemaType。

  

要更深入,您可以查看source code.

  
    

首先检查[callback] «Function»函数的每个参数是否为函数。====> .find()