查询包含特定数组的文档
假设你有一个集合 users,其中文档的结构如下:
1 | { |
要查询包含特定元素的数组,可以使用 $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 | db.AUTH_USER_TB.aggregate([ |