MongoDb常用示例

查询包含特定数组的文档

假设你有一个集合 users,其中文档的结构如下:

1
2
3
4
5
{
"_id": ObjectId("..."),
"name": "John",
"hobbies": ["reading", "swimming", "traveling"]
}

要查询包含特定元素的数组,可以使用 $in 操作符:

1
db.users.find({ hobbies: { $in: ["swimming"] } });

如果你需要查询数组中包含所有特定元素的文档,可以使用 $all 操作符:

1
db.users.find({ hobbies: { $all: ["reading", "traveling"] } });

要查询数组的长度,可以使用 $size 操作符。例如,要查询 hobbies 数组长度为 3 的文档:

1
db.users.find({ "scores.grade": { $lt: 90 } });

查询数据对象

有时候你需要查询数组中特定位置的元素,可以使用 $elemMatch 操作符。假设你的文档结构如下:
{
“_id”: ObjectId(“…”),
“name”: “John”,
“scores”: [
{ “subject”: “math”, “grade”: 90 },
{ “subject”: “english”, “grade”: 85 }
]
}
要查询 scores 数组中 subject 为 “math” 且 grade 大于 80 的文档:

1
db.users.find({ scores: { $elemMatch: { subject: "math", grade: { $gt: 80 } } } });

下面的查询语句实现用户表和用户角色表的联合查询:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
db.AUTH_USER_TB.aggregate([
{
$lookup: {
from: 'AUTH_ROLE_USER_TB',
localField: 'U_NAME',
foreignField: 'USER_NAME',
as: 'roles'
}
},
{
$match: {
roles:{
$elemMatch:{ROLE_NAME:'QL施工单位预算员'}
}
}

}
])