10.MongoDB数组查询和嵌套字段查询
10.1 知识点
查询数组中的元素
插入带数组的文档
// 插入一个新的数据,并且增加一个 lessons 数组字段
db.users.insertOne({
name: "T1",
age: 25,
lessons: [1, 3, 5, 7, 9]
});
db.users.insertOne({
name: "T2",
age: 25,
lessons: [2, 4, 6, 8, 10]
});


查询数组中包含指定值的文档
// 查询 lessons 数组中包含 1 或 4 的文档
// 这里查询的是类似“或”的操作,不是“与”的操作
db.users.find({
lessons: { $in: [1, 4] }
});

查询数组中不包含指定值的文档
// 查询没有 lessons 字段,或者 lessons 数组中不包含 11 或 4 的文档
db.users.find({
lessons: { $nin: [11, 4] }
});

查询数组中符合条件的元素
lessons 里是数字等标量时,「是否存在某个元素大于 2」应直接对字段用比较运算符,MongoDB 会按数组元素逐个比对。
// 查询 lessons 数组中至少有一个元素大于 2 的文档
db.users.find({
lessons: { $gt: 2 }
});
若数组元素是文档,要对同一条子文档同时满足多条条件,才用 $elemMatch(子文档内的 AND),例如 scores 为 { k, v } 对象数组时筛选「某一项同时满足 k 与 v」。
查询嵌套字段
插入带嵌套字段的文档
// 插入两条带 bag 对象的数据
db.users.insertOne({
name: "TT1",
age: 11,
bag: {
index: 1
}
});
db.users.insertOne({
name: "TT2",
age: 22,
bag: {
index: 2
}
});





查询嵌套字段的确切值
// 查询 bag.index 等于 1 的文档
db.users.find({ "bag.index": 1 });

查询嵌套字段的范围
// 查询 bag.index 大于 0 的文档
db.users.find({ "bag.index": { $gt: 0 } });

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com