mongodb学习记录

mongo

show dbs查看所有的数据库

使用use可以切换数据库,如果没有数据库则创建一个新的

use local切换倒local数据库

增加数据

db.test.insert({name:"jack"})向test表中插入一条数据,如果没有test表则创建一个,如果传入一个文档数组则会批量插入。

批量插入

db.test.batchInsert([{"_id":0, "_id":1}])接受一个文档数组作为参数,如果插入过程中有个文档插入失败,该文档之前的都会成功插入,该文档和之后的文档则不会插入。

3.4之后改成了

db.test.insertMany()

删除数据

db.test.remove({name:"jack"})删除test表中所有name为jack的数据

查找数据

db.test.find()查看test表中所有数据等价于db.test.find({})

db.test.findOne()查看一条数据

使用查询操作符指定条件

db.test.find({ name: { $in: ["jack", "alice"]}})查找name为jack和alice的所有数据

db.test.find({ name: "jack", age: { $lt: 20}})查找name为jack并且age小于20

嵌入文档的查询

db.test.find({ favorites: { book: "python", food: "pizza"}})查询test表中favorites字段中book为python并且food为pizza的数据

db.test.find({"favorites.book":"python"})

数组上的查询

db.test.find({ family: [ "father", "mather"]})查询所有family字段有且只有两个元素father,mather的数据

db.test.find({ family: "fahter"})查询所有family字段中包含father的数据

db.test.find({ "family.0": "father" })查询所有family字段中首个元素为fahter的数据

db.users.find( { finished: { $elemMatch: { $gt: 15, $lt: 20 } } } )查询 finished 数组至少包含一个大于 ($gt15 并且小于 ($lt20 的元素的文档

db.users.find( { finished: { $gt: 15, $lt: 20 } } )查询 finished 数组包含以某种组合满足查询条件的元素的文档;例如,一个元素满足大于 15 的条件并且有另一个元素满足小于 20 的条件,或者有一个元素满足了这两个条件

嵌入文档数组

db.users.find( { 'points.0.points': { $lte: 55 } } )查询使用 the dot notation 匹配所有 dadges 是第一个元素为``”black”`` 的数组的文档:如果你知道内嵌文档的数组索引,你可以使用 dot notation 及内嵌文档的位置指定文档

db.users.find( { 'points.points': { $lte: 55 } } )选择出所有 points``数组中至少有一个嵌入文档包含值小于或等于 ``55 的字段 points 的文档:

db.users.find( { points: { $elemMatch: { points: { $lte: 70 }, bonus: 20 } } } )查询 points 数组有至少一个包含 points 小于等于 70 并且字段 bonus 等于 20 的内嵌文档的文档

db.users.find( { "points.points": { $lte: 70 }, "points.bonus": 20 } )查询了 points 数组包含了以某种组合满足查询条件的元素的文档;例如,一个元素满足 points 小于等于 70 的条件并且有另一个元素满足 bonus 等于 20 的条件,或者一个元素同时满足两个条件

$lt 小于(less then)

$lte 小于等于(less then equal)

$gt 大于(great then)

$gte 大于等于(great then equal)

修改数据

db.test.update({name:"jack"}, {name:"mike"})将test表中name为jack的数据改为name等于mike,如果jack里面有其他的字段会全部被删除,如果不想删除,可以使用下面的命令

1.$inc

用法:{$inc:{field:value}}

作用:对一个数字字段的某个field增加value

示例:将name为chenzhou的学生的age增加5

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 22 }  
  3. #查询结果显示年龄为22  
  4. > db.students.update({name:"chenzhou"},{$inc:{age:5}})  
  5. #执行修改,把age增加5  
  6. > db.students.find()  
  7. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 }  
  8. >   
  9. #查询结果显示年龄为27,修改成功  

2.$set

用法:{$set:{field:value}}

作用:把文档中某个字段field的值设为value

示例: 把chenzhou的年龄设为23岁

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 }  
  3. > db.students.update({name:"chenzhou"},{$set:{age:23}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 }  
  6. >   

从结果可以看到,更新后年龄从27变成了23

3.$unset

用法:{$unset:{field:1}}

作用:删除某个字段field

示例: 将chenzhou的年龄字段删除

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 }  
  3. > db.students.update({name:"chenzhou"},{$unset:{age:1}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" }  
  6. >   

4.$push

用法:{$push:{field:value}}

作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型

示例:给chenzhou添加别名"michael"

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$push:{"ailas":"Michael"}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" }  
  6. >   

由结果可以看到,记录中追加了一个数组类型字段alias,且字段有一个为"Michael"的值

5.pushAll

用法:{$pushAll:{field:value_array}}

作用:用法同$push一样,只是$pushAll可以一次追加多个值到一个数组字段内。

示例:给chenzhou追加别名A1,A2

 

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pushAll:{"ailas":["A1","A2"]}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" }  
  6. >   

6.$addToSet

用法:{$addToSet:{field:value}}

作用:加一个值到数组内,而且只有当这个值在数组中不存在时才增加。

示例:往chenzhou的别名字段里添加两个别名A3、A4 

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$addToSet:{"ailas":["A3","A4"]}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  6. >   

由结果可以看出,更新后ailas字段里多了一个对象,这个对象里包含2个数据,分别是A3、A4

7.$pop

用法:删除数组内第一个值:{$pop:{field:-1}}、删除数组内最后一个值:{$pop:{field:1}}

作用:用于删除数组内的一个值

示例: 删除chenzhou记录中alias字段中第一个别名

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pop:{"ailas":-1}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  6. >   

由结果可以看书,第一个别名Michael已经被删除了。

我们再使用命令删除最后一个别名:

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pop:{"ailas":1}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }  
  6. >   

由结果可以看出,alias字段中最后一个别名["A3","A4"]被删除了。

8.$pull

用法:{$pull:{field:_value}}

作用:从数组field内删除一个等于_value的值

示例:删除chenzhou记录中的别名A1

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pull:{"ailas":"A1"}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A2" ], "name" : "chenzhou" }  
  6. >   

9.$pullAll

用法:{$pullAll:value_array}

作用:用法同$pull一样,可以一次性删除数组内的多个值。

示例: 删除chenzhou记录内的所有别名

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pullAll:{"ailas":["A1","A2"]}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" }  
  6. >   

可以看到A1和A2已经全部被删除了

10.$rename

用法:{$rename:{old_field_name:new_field_name}}

作用:对字段进行重命名

示例:把chenzhou记录的name字段重命名为sname

Shell代码  收藏代码
  1. > db.students.find()  
  2. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$rename:{"name":"sname"}})  
  4. > db.students.find()  
  5. "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "sname" : "chenzhou" }  
  6. >   

由结果可以看出name字段已经被更新为sname了。

参考自http://chenzhou123520.iteye.com/blog/1637629

db.test.save({name:"alice"})如果没有该数据则创建一个新的数据,有的话就更新

linux中在当前用户的主目录下(/home/xxx)创建一个.mongorc.js

mongo运行shell之前会加载该文件

可以在文件中重写删除操作来避免删除数据

可以指定EDITOR="/usr/bin/vim"之后就可以edit编辑shell中的变量了

在shell中可以用for循环来遍历数据

var collections = ["a", "b", "c"]
for (var i in collections){
    print(collections[i])
}
db.createCollection( "contacts",
   { validator: { $or:
      [
         { phone: { $type: "string" } },
         { email: { $regex: /@mongodb\.com$/ } },
         { status: { $in: [ "Unknown", "Incomplete" ] } }
      ]
   }
} )

使用validator来验证字段是否满足要求

db.runCommand( {
   collMod: "contacts",
   validator: { $or: [ { phone: { $exists: true } }, { email: { $exists: true } } ] },
   validationLevel: "moderate"
} )

用runCommand来修改集合中字段的验证

更多内容请查看官方文档地址http://docs.mongoing.com/manual-zh/mongo.html

posted @ 2017-07-12 17:48  菲菲菲菲菲常新的新手  阅读(209)  评论(0编辑  收藏  举报