Mongodb常见操作符和运算符详解
查询操作符(Query Operators)
$eq - 等于
1 2 3 | db.collection.find({ field: { $eq: value } })
// 示例:查找所有名字等于 "Tom" 的文档
db.users.find({ name : { $eq: "Tom" } })
|
$gt - 大于
1 2 3 | db.collection.find({ field: { $gt: value } })
// 示例:查找所有年龄大于 25 的用户
db.users.find({ age: { $gt: 25 } })
|
$gte - 大于等于
1 2 3 | db.collection.find({ field: { $gte: value } })
// 示例:查找所有年龄大于等于 25 的用户
db.users.find({ age: { $gte: 25 } })
|
$lt - 小于
1 2 3 | db.collection.find({ field: { $lt: value } })
// 示例:查找所有年龄小于 25 的用户
db.users.find({ age: { $lt: 25 } })
|
$lte - 小于等于
1 2 3 | db.collection.find({ field: { $lte: value } })
// 示例:查找所有年龄小于等于 25 的用户
db.users.find({ age: { $lte: 25 } })
|
$ne - 不等于
1 2 3 | db.collection.find({ field: { $ne: value } })
// 示例:查找所有名字不是 "Tom" 的文档
db.users.find({ name : { $ne: "Tom" } })
|
$in - 在数组中
1 2 3 | db.collection.find({ field: { $ in : array } })
// 示例:查找兴趣包含 "阅读" 或 "游泳" 的用户
db.users.find({ interests: { $ in : [ "阅读" , "游泳" ] } })
|
$nin - 不在数组中
1 2 3 | db.collection.find({ field: { $nin: array } })
// 示例:查找兴趣不含 "阅读" 和 "游泳" 的用户
db.users.find({ interests: { $nin: [ "阅读" , "游泳" ] } })
|
$or - 或者
1 2 3 | db.collection.find({ $ or : [{ condition1 }, { condition2 }] })
// 示例:查找名字为 "Tom" 或年龄大于 25 的用户
db.users.find({ $ or : [{ name : "Tom" }, { age: { $gt: 25 } }] })
|
$and - 并且
1 2 3 | db.collection.find({ $ and : [{ condition1 }, { condition2 }] })
// 示例:查找名字为 "Tom" 并且年龄大于 25 的用户
db.users.find({ $ and : [{ name : "Tom" }, { age: { $gt: 25 } }] })
|
$not - 非
1 2 3 | db.collection.find({ field: { $ not : { operator: value } } })
// 示例:查找年龄不小于 25 的用户
db.users.find({ age: { $ not : { $lt: 25 } } })
|
$exists - 字段存在
1 2 3 | db.collection.find({ field: { $exists: true or false } })
// 示例:查找有 `email` 字段的用户
db.users.find({ email: { $exists: true } })
|
更新操作符(Update Operators)
$set - 设置字段的值
1 2 3 | db.collection. update ({ query }, { $ set : { field: value } })
// 示例:更新名字为 "Tom" 的用户的年龄为 30
db.users. update ({ name : "Tom" }, { $ set : { age: 30 } })
|
$unset - 删除字段
1 2 3 | db.collection. update ({ query }, { $unset: { field: "" } })
// 示例:删除名字为 "Tom" 的用户的 `age` 字段
db.users. update ({ name : "Tom" }, { $unset: { age: "" } })
|
$inc - 增加数值字段的值
1 2 3 | db.collection. update ({ query }, { $inc: { field: value } })
// 示例:将名字为 "Tom" 的用户的年龄增加 2
db.users. update ({ name : "Tom" }, { $inc: { age: 2 } })
|
$push - 向数组字段添加元素
1 2 3 | db.collection. update ({ query }, { $push: { field: value } })
// 示例:向名字为 "Tom" 的用户的兴趣列表添加 "足球"
db.users. update ({ name : "Tom" }, { $push: { interests: "足球" } })
|
$pull - 从数组字段删除元素
1 2 3 | db.collection. update ({ query }, { $pull: { field: value } })
// 示例:从名字为 "Tom" 的用户的兴趣列表中删除 "足球"
db.users. update ({ name : "Tom" }, { $pull: { interests: "足球" } })
|
$addToSet - 向数组添加元素,但不创建重复项
1 2 3 | db.collection. update ({ query }, { $addToSet: { field: value } })
// 示例:向名字为 "Tom" 的用户的兴趣列表中添加 "游泳" ,如果 "游泳" 已存在,则忽略
db.users. update ({ name : "Tom" }, { $addToSet: { interests: "游泳" } })
|
$each - 与 $push 或 $addToSet 配合,向数组添加多个元素
1 2 3 | db.collection. update ({ query }, { $push: { field: { $each: [value1, value2] } } })
// 示例:一次性向名字为 "Tom" 的用户的兴趣列表中添加多个兴趣
db.users. update ({ name : "Tom" }, { $push: { interests: { $each: [ "绘画" , "舞蹈" ] } } })
|
$pop - 从数组的开头或末尾删除元素
1 2 3 4 | // $pop: 1 从末尾移除,$pop: -1 从开头移除
db.collection. update ({ query }, { $pop: { field: 1 or -1 } })
// 示例:从名字为 "Tom" 的用户的兴趣列表末尾删除一个兴趣
db.users. update ({ name : "Tom" }, { $pop: { interests: 1 } })
|
聚合管道操作符(Aggregation Pipeline Operators)
$match - 过滤数据
1 2 3 | db.collection.aggregate([ { $match: { field: value } } ])
// 示例:筛选所有年龄大于 25 的用户
db.users.aggregate([ { $match: { age: { $gt: 25 } } }])
|
$group - 按字段分组
1 2 3 4 5 6 7 | db.collection.aggregate([
{ $ group : { _id: "$field" , count : { $ sum : 1 } } }
])
// 示例:按兴趣分组计数用户
db.users.aggregate([
{ $ group : { _id: "$interests" , count : { $ sum : 1 } } }
])
|
$project - 指定输出字段
1 2 3 | db.collection.aggregate([ { $project: { field1: 1, field2: 0 } } ])
// 示例:输出用户的名字和兴趣,不输出其他字段
db.users.aggregate([ { $project: { name : 1, interests: 1 } }])
|
$sort - 排序
1 2 3 4 | db.collection.aggregate([ { $sort: { field: 1 or -1 } } ])
// 1 代表升序, -1 代表降序
// 示例:按年龄升序排列用户
db.users.aggregate([ { $sort: { age: 1 } }])
|
以上是MongoDB中的一些常用操作符和运算符,它们可以帮你构建灵活和强大的数据操作指令。在实际的应用中,会将多个操作符组合起来使用,以满足复杂的业务逻辑。