抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文主要学习了查询操作符和更新操作符。

环境

Windows 10 企业版 LTSC 21H2
MongoDB 6.0.21

1 查询操作符

1.1 比较查询

比较查询:

操作符 描述 示例
$eq 等于 查询age等于25的文档:
bson
1
2
3
db.student.find(
{ age: { $eq: 25 } }
);
$ne 不等于 查询age不等于25的文档:
bson
1
2
3
db.student.find(
{ age: { $ne: 25 } }
);
$gt 大于 查询age大于25的文档:
bson
1
2
3
db.student.find(
{ age: { $gt: 25 } }
);
$lt 小于 查询age小于25的文档:
bson
1
2
3
db.student.find(
{ age: { $lt: 25 } }
);
$gte 大于等于 查询age大于等于25的文档:
bson
1
2
3
db.student.find(
{ age: { $gte: 25 } }
);
$lte 小于等于 查询age小于等于25的文档:
bson
1
2
3
db.student.find(
{ age: { $lte: 25 } }
);
$gte 包含 查询age包含25和35的文档:
bson
1
2
3
db.student.find(
{ age: { $in: [ 25, 35 ] } }
);
$lte 不包含 查询age不包含25和35的文档:
bson
1
2
3
db.student.find(
{ age: { $nin: [ 25, 35 ] } }
);

1.2 逻辑查询

逻辑查询:

操作符 描述 示例
$and 逻辑与 查询age等于25且sex为女的文档:
bson
1
2
3
4
5
6
db.student.find(
{ $and: [
{ age: { $eq: 25 } },
{ sex: "女" }
] }
);
$or 逻辑或 查询age等于25或sex为女的文档:
bson
1
2
3
4
5
6
db.student.find(
{ $or: [
{ age: { $eq: 25 } },
{ sex: "女" }
] }
);
$nor 逻辑非或 查询age不等于25且sex不为女的文档:
bson
1
2
3
4
5
6
db.student.find(
{ $nor: [
{ age: { $eq: 25 } },
{ sex: "女" }
] }
);
$not 逻辑非 查询age不等于25的文档:
bson
1
2
3
db.student.find(
{ age: { $not: { $eq: 25 } } }
);
等价于:
bson
1
2
3
db.student.find(
{ age: { $ne: 25 } }
);

1.3 元素查询

元素查询:

操作符 描述 示例
$exists 是否存在 查询包含age字段的文档:
bson
1
2
3
db.student.find(
{ age: { $exists: true } }
);
$type 数据类型 查询age字段类型为整数的文档:
bson
1
2
3
db.student.find(
{ age: { $type: "int" } }
);

1.4 评估查询

评估查询:

操作符 描述 示例
$regex 支持正则表达式 查询address以北京市开头的文档:
bson
1
2
3
db.student.find(
{ address: { $regex: /^北京市/ } }
);

1.5 数组查询

数组查询:

操作符 描述 示例
$all 数组中所有元素都满足条件 查询tags数组中同时包含age和sex的文档:
bson
1
2
3
db.student.find(
{ tags: { $all: ["age", "sex"] } }
);
$elemMatch 匹配数组中的元素 查询scores数组中存在大于80的文档:
bson
1
2
3
db.student.find(
{ scores: { $elemMatch: { $gt: 80 } } }
);
$size 数组的大小 查询book数组大小为2的文档:
bson
1
2
3
db.student.find(
{ book: { $size: 2 } }
);

2 更新操作符

2.1 字段更新

字段更新:

操作符 描述 示例
$rename 更新字段名 将name为张三的location字段名设置为address:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $rename: { "location": "address" } }
);
$set 更新字段值 将name为张三的age字段值设置为30:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $set: { age: 30 } }
);
$unset 删除字段 将name为张三的age字段删除:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $unset: { age: 0 } }
);
$inc 将字段按指定值相加 将name为张三的age字段减1:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $inc: { age: -1 } }
);
$mul 将字段按指定值相乘 将name为张三的age字段乘2:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $mul: { age: 2 } }
);
$min 设置最大值,当指定值小于字段值,更新为指定值 将name为张三的age字段的最大值更新为16:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $min: { age: 16 } }
);
$max 设置最小值,当指定值大于字段值,更新为指定值 将name为张三的age字段的最小值更新为18:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $max: { age: 18 } }
);

2.2 数组更新

数组更新:

操作符 描述 示例
$pop 从数组的开头或结尾移除元素,末尾是1,开头是-1 将name为张三的scores数组移除末尾元素:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $pop: { score: 1 } }
);
$push 将元素添加到数组的末尾 将name为张三的scores数组末尾添加100元素:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $push: { score: 100 } }
);
$pull 从数组中移除所有匹配的元素 将name为张三的scores数组移除90元素:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $pull: { score: 90 } }
);
$pullAll 从数组中移除所有匹配的元素,支持多个 将name为张三的scores数组移除70元素和80元素:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $pullAll: { score: [ 70, 80 ] } }
);
等价于:
bson
1
2
3
db.student.updateOne(
{ name: "张三" }, { $pull: { score: { $in: [ 70, 80 ] } } }
);

评论