在上一章中有讲到文档的插入操作是用 insert 的方法。如果该集合不在该数据库中,mongodb 会自动创建该集合并插入文档
用 find 的方法可以查找所有的集合数据
> db.maple.find()
{"_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhf"
也可以将数据定义为一个变量:
document=({"name":"zhf"})
db.maple.insert(document) 文档更新:
MongoDB 使用 update() 和 save() 方法来更新集合中的文档
参数说明:
query : update 的查询条件,类似 sql update 查询内 where 后面的。
update : update 的对象和一些更新的操作符(如 $,$inc...)等,也可以理解为 sql update 查询内 set 后面的
upsert : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 false,不插入。
multi : 可选,mongodb 默认是 false, 只更新找到的第一条记录,如果这个参数为 true, 就把按条件查出来多条记录全部更新。
writeConcern : 可选,抛出异常的级别。db.maple.update({"name":"zhf"},{"$set":{"name":"zhanghongfeng"}})
还可以采用运算符的方式来进行判断
> db.maple.update({"age":{"$eq":35}},{"$set":{"city":"chengdu"}})
#找到年龄等于 35 的文档并将城市设置为 chengdu
> db.maple.update({"city":"chengdu"},{"$inc":{"age":1}})
#找到城市为 chengdu 的文档并将 age 加 1
> db.maple.update({"city":"chengdu"},{"$inc":{"age":-1}})
#找到城市为 chengdu 的文档并将 age 减 1
#unset:删除某个字段
> db.maple.update({"age":35},{$unset:{"programming":1}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})
> db.maple.find()
{"_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{"_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing" }
{"_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{"_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : ["C", "python", "Go", "Java"] }$push 操作:把 value 追加到 field 里面去,field 一定要是数组类型才行,如果 field 不存在,会新增一个数组类型加进去
> db.maple.update({"age":35},{$push:{"programming":"javascript"}})
> db.maple.find()
{"_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{"_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : ["javascript"] }
{"_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{"_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : ["C", "python", "Go", "Java"] }
#当数组不存在的时候会新增一个数组
> db.maple.update({"age":35},{$push:{"programming":"mysql"}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})
> db.maple.find()
{"_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{"_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : ["javascript", "mysql"] }
{"_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{"_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : ["C", "python", "Go", "Java"] }
#已存在的情况下则会继续往数组里面添加数据
> db.maple.update({"age":35},{$pushAll:{"programming":["object-c","html"]}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})
> db.maple.find()
{"_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }
{"_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : ["javascript", "mysql", ["mongodb", "linux"], "object-c", "HTML" ] }
{"_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }
{"_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : ["C", "python", "Go", "Java"] }
#添加多个数据到数组中采用 pushAll 的方式
#addToSet
只有在数组中不存在的时候才添加:
> db.maple.update({"age":35},{$addToSet:{"programming":"mysql"}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 0})
#pop
删除第一个和最后一个元素
> db.maple.update({"age":35},{$pop:{"programming":1}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})
> db.maple.update({"age":35},{$pop:{"programming":-1}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})
#pull:删除特定的元素
> db.maple.update({"age":35},{$pull:{"programming":"object-c"}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})
文档查找:
我们用关系数据库中的对比来看下:
db.maple.find() 相当于 select * from maple
db.maple.find({"age":27}) 相当于 select * from maple where age='27'
db.maple.find({"age":27,"name":"xing"}) 相当于 select * from maple where age='27' and name="xing"
db.maple.find({},{"name":1}) select name from maple, 如果 name:0 则是不显示 name 字段
db.maple.find().limit(1) 相当于 select * from maple limit 1
db.maple.find().sort({_id:-1}).limit(1) 相当于 select * from maple order by _id desc limit 1db.maple.find({"age":{"$in",[12,34,100]}}) 相当于 select * from maple where age in (12,3,100)
db.maple.find({"age":{"$nin",[12,3,100]}}) 相当于 select * from maple where _id not in (12,3,100)
db.maple.find({"$or":[{"age":16},{"name":"xing"}]}) 相当于 select * from blog where age = 16 or name = 'xing'
db.maple.find({"id_num":{"$mod":[5,1]}}) 取的是 id_num mod 5 = 1 的字段,如 id_num=1,6,11,16
db.maple.find({"id_num":{"$not":{"$mod":[5,1]}}}) 取的是 id_num mod 5 != 1 的字段,如除了 id_num=1,6,11,16 等所有字段,多于正则一起用 $exists 判断字段是否存在
db.blog.find({"name" : {$exists : true}}); // 如果存在元素 name, 就返回
db.blog.find({"name" : {$exists : false}}); // 如果不存在元素 name,就返回
#查询数组:
db.blog.find({"coding":{"$size":4}}) coding 数组长度为 3 的符合结果
db.blog.find({"coding":{"$all":["C", "python", "Go", "Java"]}}) fruit 中必需有数组中的每一个才符合结果
来源: http://www.bubuko.com/infodetail-2431961.html