mongoDB 比较运算符

比较运算符是我们学习任何语言或系统中最为常见的运算符之一。mongoDB的比较运算符,跟Linux的差不多,只不过每一个比较运算符前面会带有$eq$gt$gte$lt$lte$ne$innin等,下面将对这几个运算符进行描述。

一、比较运算符

  $eq    =               "="
  $gt   (greater than )  >
  $gte                   >=  (equal)
  $lt   (less than)      <
  $lte                   <=  (equal)
  $ne   (not equal)      !=
  $in                    in
  $nin  (not in)         !in

    重点:所有的比较运算符都是出现在键与值得中间,示例如下
            { <field_name>: { $operator: <value> } }
            { <ename>: { $eq: "robin" } }
            { <qty>: { $gt: 20 } }

二、比较运算符示例

1. $eq

     { <field>: {\$eq: <value> } }
        $eq表达式与{ field: <value> }等价
        <1> 支持简单匹配
        <2> 支持文档匹配(document,逐字段比较)
        <3> 支持数组匹配(array,有顺序要求)

    //单值匹配
    db.persons.find( { age: { $eq: 25 } } )
    db.persons.find( { age: 25 } )        //与上一条语句等价         

    //多值匹配
    db.persons.find( { age: { $eq: 25 } ,country: "USA"} )   
    db.persons.find({$and:[{age:{$eq:25}},{country:{$eq:"USA"}}]}) //也可以使用$and运算符

    //嵌套文档匹配
    db.persons.find( { score: {"c" : 75, "m" : 63,"e" : 97}} )

    db.persons.find({"score.c":{$eq:89}}) //可以使用基于.成员的方式进行匹配
    db.persons.find({"score.c":89})          //等价的查询方式

    //数组匹配
    db.persons.find({"books":{$eq:"PHP"}})  //forech查找,不包含A的数组不会被返回
    db.persons.find({"books":{$in:["PHP"]}})  //也可以使用$in方式替代
    db.persons.find({"books":"PHP"})        //等价方式

2. $gt/$gte

    {field: {$gt: value} }

    db.persons.find( { age: { $gt: 20 } } )                   //大于运算符
    db.persons.find( { age: { $gte: 25 } } ).sort({"age":-1}) //大于等于运算符及倒序排列

3. $lt/$lte

    Syntax: {field: {$lt: value} }

    db.persons.find( { age: { $lt: 25 } } )
    db.persons.find( { age: { $lte: 25 } } ).sort({"age":-1})
    db.persons.find( { age: { $lte: 25 } } )

4. $ne

    Syntax: {field: {$ne: value} }

    db.persons.find( { age: { $ne: 20 } } ).sort({"age":-1})

5. $in

    Syntax: { field: { $in: [<value1>, <value2>, ... <valueN> ] } }

    db.persons.find( { age: { $in: [ 25, 27 ] } } )  //多值匹配
    db.persons.find( { books: { $in: [ /^JA/, /^PH/ ] } } ) //正则表达式匹配,查询以JA以及PH开头的
    //Author : Leshami
    //Blog   : http://blog.youkuaiyun.com/leshami

6. $nin

    Syntax: { field: { $nin: [ <value1>, <value2> ... <valueN> ]} }

    db.persons.find( { age: { $nin: [ 25, 27 ] } } ).sort({"name":-1});
    db.persons.update({ books: { $nin:["JAVA","PHP"]} },{$set: { age:100 }}) //基于$nin的文档更新

三、演示用到的示例文档

var persons = [{
    name:"robinson.cheng",
    age:25,
    email:"robinson.cheng@qq.com",
    score:{c:89,m:96,e:87},
    country:"USA",
    books:["JS","C++","EXTJS","MONGODB"]
},
{
    name:"tom.tong",
    age:25,
    email:"tom.tong@qq.com",
    score:{c:75,m:66,e:97},
    country:"USA",
    books:["PHP","JAVA","EXTJS","C++"]
},
{
    name:"jerry.liu",
    age:26,
    email:"jerry.liu@qq.com",
    score:{c:75,m:63,e:97},
    country:"USA",
    books:["JS","JAVA","C#","MONGODB"]
},
{
    name:"henry.ye",
    age:27,
    email:"henry.ye@qq.com",
    score:{c:89,m:86,e:67},
    country:"China",
    books:["JS","JAVA","EXTJS","MONGODB"]
},
{
    name:"lisi",
    age:26,
    email:"lisi@qq.com",
    score:{c:53,m:96,e:83},
    country:"China",
    books:["JS","C#","PHP","MONGODB"]
},
{
    name:"fred.shu",
    age:27,
    email:"fred.shu@qq.com",
    score:{c:45,m:65,e:99},
    country:"China",
    books:["JS","JAVA","C++","MONGODB"]
},
{
    name:"jason.wu",
    age:27,
    email:"jason.wu@qq.com",
    score:{c:99,m:96,e:97},
    country:"China",
    books:["JS","JAVA","EXTJS","PHP"]
},
{
    name:"david.xiao",
    age:26,
    email:"david.xiao@dbsupport.cn",
    score:{c:39,m:54,e:53},
    country:"Korea",
    books:["JS","C#","EXTJS","MONGODB"]
},
{
    name:"frank.hu",
    age:27,
    email:"frank.hu@dbsupport.cn",
    score:{c:35,m:56,e:47},
    country:"Korea",
    books:["JS","JAVA","EXTJS","MONGODB"]
},
{
    name:"joe.zhou",
    age:21,
    email:"joe.zhou@dbsupport.cn",
    score:{c:36,m:86,e:32},
    country:"Korea",
    books:["JS","JAVA","PHP","MONGODB"]
},
{
    name:"steve.tang",
    age:22,
    email:"steve.tang@dbsupport.cn",
    score:{c:45,m:63,e:77},
    country:"Korea",
    books:["JS","JAVA","C#","MONGODB"]
}]
for(var i = 0;i<persons.length;i++){
    db.persons.insert(persons[i])
}
var persons = db.persons.find({name:"robinson.cheng"})
while(persons.hasNext()){
    obj = persons.next();
        print(obj.books.length)
} 
### MongoDB 运算符及其使用方法 #### 1. 基本概念 MongoDB 提供了一系列丰富的运算符用于查询和更新文档。这些运算符可以分为多个类别,包括比较运算符、逻辑运算符、数组运算符等。通过 PyMongo 库,开发者可以在 Python 环境下轻松调用这些运算符并实现复杂的数据操作[^1]。 --- #### 2. 比较运算符 比较运算符主要用于筛选满足特定条件的文档。以下是常见的比较运算符: - **`$eq`**: 表示等于某值。 ```python collection.find({"field": {"$eq": value}}) ``` - **`$ne`**: 表示不等于某值。 ```python collection.find({"field": {"$ne": value}}) ``` - **`$gt`**, **`$gte`**, **`$lt`**, **`$lte`**: 分别表示大于、大于等于、小于、小于等于。 ```python collection.find({"age": {"$gt": 18, "$lte": 30}}) ``` 以上是比较运算符的基础应用方式[^1]。 --- #### 3. 逻辑运算符 逻辑运算符用于组合多个表达式以构建更复杂的查询条件。 - **`$and`**: 同时满足多个条件。 ```python collection.find({"$and": [{"field1": value1}, {"field2": value2}]}) ``` - **`$or`**: 至少满足其中一个条件。 ```python collection.find({"$or": [{"field1": value1}, {"field2": value2}]}) ``` - **`$not`**: 取反某个条件。 ```python collection.find({"field": {"$not": {"$eq": value}}}) ``` 逻辑运算符能够显著提升查询灵活性[^3]。 --- #### 4. 数组运算符 当字段存储的是数组时,可使用以下运算符进行匹配或修改。 - **`$all`**: 匹配包含指定所有元素的数组。 ```python collection.find({"tags": {"$all": ["tag1", "tag2"]}}) ``` - **`$size`**: 匹配具有指定大小的数组。 ```python collection.find({"arrayField": {"$size": 3}}) ``` - **`$elemMatch`**: 匹配数组中至少有一个元素符合条件的情况。 ```python collection.find({"scores": {"$elemMatch": {"$gt": 90, "$lt": 100}}}) ``` 数组运算符特别适用于处理嵌套结构的数据集。 --- #### 5. 更新运算符 除了查询外,MongoDB 的更新运算符也非常重要,常用于修改现有文档的内容。 - **`$set`**: 设置新值到指定字段。 ```python collection.update_one({"_id": id}, {"$set": {"name": new_name}}) ``` - **`$inc`**: 对数值类型的字段增加指定值。 ```python collection.update_one({"_id": id}, {"$inc": {"count": 1}}) ``` - **`$push`**, **`$pull`**: 添加或移除数组中的元素。 ```python collection.update_one({"_id": id}, {"$push": {"list_field": item}}) collection.update_one({"_id": id}, {"$pull": {"list_field": item}}) ``` 更新运算符支持高效地维护动态变化的数据集合[^3]。 --- #### 6. `$` 运算符与索引优化 `$` 是一种特殊的位置运算符,通常与其他运算符配合使用来定位数组中的第一个匹配项。为了提高查询性能,建议为常用字段创建索引。例如: ```python collection.create_index([("field", pymongo.ASCENDING)]) ``` 此部分详细介绍了如何利用 `$` 和索引来加速查询过程[^2]。 --- ### 总结 MongoDB运算符种类繁多,涵盖了从简单过滤到复杂数据操作的各种需求。无论是基本的比较运算符还是高级的逻辑运算符,都能帮助开发人员快速完成所需功能。同时,合理设计索引策略对于大规模数据环境下的性能至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风智语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值