排重

本文的查询是指存储了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);
}
});
}

控制台输出:
findAllCountry


计数

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);
}
});
};

控制台输出:
count


下一篇mongoose教程–更新


About Sodino