【MongoDB学习笔记】4:条件/类型操作符与对文档的查询/删除

对文档的查询

find查询

在指定的db下,使用

db.集合名.find(
    查询操作符指定条件,
    投影操作符指定返回
)

来确定以什么样的条件(相当于SQL中的WHERE)来对这个集合做查询,返回哪些查询结果(相当于SQL中的SELECT)。

投影操作符省略时,默认返回文档的所有键值对;查询操作符省略时,默认获取集合中的所有文档。

条件操作符

MongoDB的BSON中的key可以视为RDBMS中的列名,某文档下该key对应的value可以视为某元组中这一列的值。

含义 写法 英文释义
key=value {key:value} -
key<value {key:{$lt,value}} less than
key<=value {key:{$lte,value}} less than equal
key>value {key:{$gt,value}} greater than
key>=value {key:{$gte,value}} greater than equal
key!=value {key:{$ne,value}} not equal

> db.lzhCllctn1.find()
{ "_id" : ObjectId("5b29cfbaf5b9d062d3a61e5c"), "a" : 1 }
{ "_id" : ObjectId("5b29cfc5f5b9d062d3a61e5d"), "a" : 2, "b" : 1 }
{ "_id" : ObjectId("5b29cfd5f5b9d062d3a61e5e"), "a" : 1, "b" : 1 }
> db.lzhCllctn1.find({'a':{$gt:1}})
{ "_id" : ObjectId("5b29cfc5f5b9d062d3a61e5d"), "a" : 2, "b" : 1 }
> db.lzhCllctn1.find({'a':{$gte:1}})
{ "_id" : ObjectId("5b29cfbaf5b9d062d3a61e5c"), "a" : 1 }
{ "_id" : ObjectId("5b29cfc5f5b9d062d3a61e5d"), "a" : 2, "b" : 1 }
{ "_id" : ObjectId("5b29cfd5f5b9d062d3a61e5e"), "a" : 1, "b" : 1 }
> db.lzhCllctn1.find({'a':{$ne:2}})
{ "_id" : ObjectId("5b29cfbaf5b9d062d3a61e5c"), "a" : 1 }
{ "_id" : ObjectId("5b29cfd5f5b9d062d3a61e5e"), "a" : 1, "b" : 1 }
>

逻辑表达式的组合条件

AND条件

在逻辑表达式用连续的AND条件组合时,每个逻辑表达式会剖去外层的{}BSON壳,组合在一个BSON里。

{条件1,条件2,条件3,...}

> db.lzhCllctn1.find({a:{$ne:2},b:1})
{ "_id" : ObjectId("5b29cfd5f5b9d062d3a61e5e"), "a" : 1, "b" : 1 }
>

OR条件

OR条件的每个逻辑表达式会保留自己的{}壳,并由以关键字$or为键的数组囊括。

{$or:[{条件1},{条件2},{条件3},...]}

>  db.lzhCllctn1.find({$or:[{a:2},{b:{$ne:1}}]})
{ "_id" : ObjectId("5b29cfbaf5b9d062d3a61e5c"), "a" : 1 }
{ "_id" : ObjectId("5b29cfc5f5b9d062d3a61e5d"), "a" : 2, "b" : 1 }
>

对文档的删除

remove删除

在指定的db下,使用

db.集合名.remove({条件})

可以按前面学的条件删除集合中指定的文档。

db.集合名.remove({})

可以删除该集合中的全部文档,即无条件删除。

> db.lzhCllctn1.find({})
{ "_id" : ObjectId("5b29cfbaf5b9d062d3a61e5c"), "a" : 1 }
{ "_id" : ObjectId("5b29cfc5f5b9d062d3a61e5d"), "a" : 2, "b" : 1 }
{ "_id" : ObjectId("5b29cfd5f5b9d062d3a61e5e"), "a" : 1, "b" : 1 }
> db.lzhCllctn1.remove({a:1,b:1})
WriteResult({ "nRemoved" : 1 })
> db.lzhCllctn1.find({})
{ "_id" : ObjectId("5b29cfbaf5b9d062d3a61e5c"), "a" : 1 }
{ "_id" : ObjectId("5b29cfc5f5b9d062d3a61e5d"), "a" : 2, "b" : 1 }
> db.lzhCllctn1.remove({})
WriteResult({ "nRemoved" : 2 })
> db.lzhCllctn1.find({})
>

类型操作符

类型-数字对照表

摘自runoob,废弃的6号就不记录了。

类型 查询所用数字
Double 1
String 2
Object 3
Array 4
Binary data 5
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key -1(255)
Max key 127

类型操作符的使用

测试某key对应的value是某个类型,使用

{key:{$type:数字}}

其中数字为要测试的类型对应上表中的数字。

> db.lzhCllctn1.insert({a:1,b:'1'})
WriteResult({ "nInserted" : 1 })
> db.lzhCllctn1.insert({a:1,b:1})
WriteResult({ "nInserted" : 1 })
> db.lzhCllctn1.find({})
{ "_id" : ObjectId("5b29d817f5b9d062d3a61e5f"), "a" : 1, "b" : "1" }
{ "_id" : ObjectId("5b29d81ff5b9d062d3a61e60"), "a" : 1, "b" : 1 }
> db.lzhCllctn1.find({b:{$type:18}})
> db.lzhCllctn1.find({b:{$type:1}})
{ "_id" : ObjectId("5b29d81ff5b9d062d3a61e60"), "a" : 1, "b" : 1 }
> db.lzhCllctn1.find({b:{$type:2}})
{ "_id" : ObjectId("5b29d817f5b9d062d3a61e5f"), "a" : 1, "b" : "1" }
> db.lzhCllctn1.remove({b:{$type:2}})
WriteResult({ "nRemoved" : 1 })
> db.lzhCllctn1.find({})
{ "_id" : ObjectId("5b29d81ff5b9d062d3a61e60"), "a" : 1, "b" : 1 }
>

在查询类型18时没有返回结果,说明MongoDB中默认插入的数字类型是Double。

> db.lzhCllctn1.find({b:{$type:16}})
> db.lzhCllctn1.find({b:{$type:1}})
{ "_id" : ObjectId("5b29d81ff5b9d062d3a61e60"), "a" : 1, "b" : 1 }
>

看来16号对应的32位Integer也是不行的,Double就是Double。

猜你喜欢

转载自blog.csdn.net/shu15121856/article/details/80744142