代码之家  ›  专栏  ›  技术社区  ›  Nimbocrux

mongodb文档模型中的歧义。find())

  •  1
  • Nimbocrux  · 技术社区  · 6 年前

    所以我在做 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 回复  |  直到 6 年前
        1
  •  1
  •   jsur    6 年前

    Mongoose构建MongoDB .find() 从您的 Book.find() 如果你 look at Mongoose source 你会看到的 Model.find 检查的第一个参数 find 是一个函数,如果是,则将该函数作为第1566行MongoDB查询生成器的回调传递。

    这样一个空的 conditions 对象由Mongoose传递到MongoDB 找到 与回调一起使用,回调将返回案例中的所有书籍。

        2
  •  1
  •   NullPointer    6 年前

    [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()

    [options] «Object» 可选,请参见query.prototype.setoptions()。

    [callback] «Function» 返回: 查询 查找文档

    在发送命令之前,条件被强制转换为各自的模式类型。

    更深入的了解 source code.

    每一个争论 。查找() 首先检查函数是否为函数。 (typeof parameter=== 'function')