0%

MongoDB聚合查询之match

在Mongodb的聚合查询中,有一个对我们的查询文档进行条件过滤的操作,这个操作就是match,在match操作中,我们可以使用更精确的查询条件来找到我们的目标文档。

How to use

插入几条数据到User表中(所有示例均使用mongoose进行操作数据库,以下不作说明)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const mongoose = require('mongoose'),
User = mongoose.model('user');
User.insertMany([{
"age": 18,
"name": "user1",
"sex": "female",
}, {
"age": 20,
"name": "user2",
"sex": "male",
}, {
"age": 22,
"name": "user3",
"sex": "female",
}, {
"age": 28,
"name": "user4",
"sex": "male",
}])

然后使用聚合查询的match操作找出年龄在20岁以上(不包含20岁)的user

1
2
3
4
5
6
7
8
9
10
11
12
13
User.aggregate([{
$match: {
age: {
$gt: 20
}
}
}]).exec((err, users) => {
if (err) {
// process error
} else {
// process users
}
});

易错点

在进行_id匹配时要使用ObhectId来进行匹配,而不是普通的字符串_id来匹配

错误示例:

1
2
3
4
5
6
7
8

User.aggregate([{
$match: {
_id: {$in: ['592eb5c443d5c897d8282c88']},
}
}]).exec((err, user) => {
console.log(user.length);// 0
});

正确示例

1
2
3
4
5
6
7
8
9
10
const mongoose = require('mongoose'),
User = mongoose.model('user');

User.aggregate([{
$match: {
_id: {$in: [mongoose.Types.ObjectId('592eb5c443d5c897d8282c88')]},// 注意,是这里做了修改
}
}]).exec((err, user) => {
console.log(user.length);// 1
});

相关文档及问题

Enjoy IT