您的位置:首页 > 数据库 > Mongodb

MongoDB Aggregation Match

2017-10-12 00:00 344 查看
摘要: MongoDB聚合查询之match

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

How to use

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

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

User.aggregate([{
$match: {
age: {
$gt: 20
}
}
}]).exec((err, users) => {
if (err) {
// process error
} else {
// process users
}
});

易错点

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

错误示例:

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

正确示例

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

相关文档及问题

官方文档

Matching by ObjectId When Using Raw Query or Aggregation

Moongoose aggregate $match does not match id's

How to use aggregrate in mongodb to $match _id

Enjoy IT
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息