Mongoose中Model.find()和Query.prototype.find()有什么区别?它们似乎都在做同样的事情,返回一个Query示例。它们之间有什么区别吗?我应该使用一个vs另一个吗?如果问题看起来太简单,我很抱歉。我不是编程新手,但我是JavaScript新手。
v64noz0r1#
从queries文档中,我们知道:Mongoose模型为CRUD操作提供了几个静态帮助函数。每个函数返回一个mongoose Query对象。Model.find()方法只是Query.prototype.find()方法的 Package 器。Model上常用的Model.deleteOne()、Model.find()等方法封装了查询对象上的多个方法调用,使用起来更加方便Model.find()源代码,参见7.1.1/lib/model.js#L2045
Query
Model.find()
Query.prototype.find()
Model.deleteOne()
Model.find = function find(conditions, projection, options) { _checkContext(this, 'find'); if (typeof arguments[0] === 'function' || typeof arguments[1] === 'function' || typeof arguments[2] === 'function' || typeof arguments[3] === 'function') { throw new MongooseError('Model.find() no longer accepts a callback'); } const mq = new this.Query({}, {}, this, this.$__collection); mq.select(projection); mq.setOptions(options); return mq.find(conditions); };
this.Query是Query类的子类,请参见7.1.1/lib/model.js#L4620
this.Query
const Query = require('./query'); // ... model.Query = function() { Query.apply(this, arguments); }; Object.setPrototypeOf(model.Query.prototype, Query.prototype);
继承是如何工作的?请参见使用Object.setPrototypeOf()的伪经典继承它创建一个查询示例,并调用Query.prototype.select()和Query.prototype.setOptions()来设置查询的projection和options。最后,调用Query.prototype.find()方法。
projection
options
1条答案
按热度按时间v64noz0r1#
从queries文档中,我们知道:
Mongoose模型为CRUD操作提供了几个静态帮助函数。每个函数返回一个mongoose
Query
对象。Model.find()
方法只是Query.prototype.find()
方法的 Package 器。Model上常用的Model.deleteOne()
、Model.find()
等方法封装了查询对象上的多个方法调用,使用起来更加方便Model.find()
源代码,参见7.1.1/lib/model.js#L2045this.Query
是Query
类的子类,请参见7.1.1/lib/model.js#L4620继承是如何工作的?请参见使用Object.setPrototypeOf()的伪经典继承
它创建一个查询示例,并调用Query.prototype.select()和Query.prototype.setOptions()来设置查询的
projection
和options
。最后,调用Query.prototype.find()方法。