排重 本文的查询是指存储了5个手机数据后再查询。存储实现见文章:【Node.js】mongoose教程–存储 。
GitHub源码链接:sodino#MongoDemo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Query#distinct([field], [criteria], [callback]) Declares or executes a distict() operation. Parameters: [field] <String> [criteria] <Object, Query> [callback] <Function> Returns: <Query> this See: distinct Passing a callback executes the query. Example distinct(field, conditions, callback) distinct(field, conditions) distinct(field, callback) distinct(field) distinct(callback) distinct()
唉唉,以上的官方文档,写了跟没写有什么区别。
field
:可选项。String,用于指定需要排重的字段名称。当field
不填写时,不能用空字符串“”
代替,不填时也不出出现criteria
参数。criteria
:可选项。用于指定需要排重的范围。相当于find()
的查询条件。callback
:可选项。用于接受排重的结果。当没有填写该值时,可以通过链式调用Query.exec(callback)
获取排重结果。
在存储实现的文章中共存了5个手机型号数据,可以用排重Query.distinct()
提出这些手机都是哪个国家生产的,并且这些国家的名字只出现一次。
1 2 3 4 5 6 7 8 9 10 function findAllCountry() { Phone.find({}).distinct('manufacturer.country').exec((err, countrys)=>{ console.log('---findAllCountry()---Remove duplicate------------------------------'); if (err) { console.log(err); } else { console.log(countrys); } }); }
控制台输出:
计数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Query#count([criteria], [callback]) Specifying this query as a count query. Parameters: [criteria] <Object> mongodb selector [callback] <Function> Returns: <Query> this Passing a callback executes the query. Example: var countQuery = model.where({ 'color': 'black' }).count(); query.count({ color: 'black' }).count(callback) query.count({ color: 'black' }, callback) query.where('color', 'black').count(function (err, count) { if (err) return handleError(err); console.log('there are %d kittens', count); })
可以使用Query.count()
进行计数。
criteria
:可选参数,表示要计数的查询条件。当表示要全部计数时,可用空对象{}
代替。callback
:可选参数,用于接收计数结果。
以下代码演示统计当前的Phone
数量:
1 2 3 4 5 6 7 8 9 10 11 12 13 phoneSchema.statics.printCount = function() { // 其它的count()计算方法见以下链接:http://mongoosejs.com/docs/api.html#query_Query-count // Model.count([selector], [callback]) this.count({}, (err, count) => { console.log('---printCount()-----------------------------') if (err) { console.log(err); } else { console.log('phone count=' + count); } }); };
控制台输出:
下一篇mongoose教程–更新
About Sodino