本节讲介绍MongoDB数据的一些基本操作,主要包含增删改,查询操作在下一节详细讲解,本节主要包含如下操作:
- 向集合中添加文档
- 从集合中删除文档
- 修改现有的文档
一、新增
使用 insert 方法向目标集合中插入一个文档:
db.foo.insert({"bar" : "baz"})
该操作会给文档自动增加一个 "_id" 键,然后将其保存到MongoDB数据库中。使用 db.foo.find(),可以查看刚插入的记录如下:
> db.foo.find(); { "_id" : ObjectId("5b820c6f7982250d8c3ca8dc"), "bar" : "baz" }
insert 还可以进行批量插入,但是接受的参数必须为文档数组,例如:
db.foo.insert([ {"_id" : 0}, {"_id" : 1}, {"_id" : 2} ])
二、删除
现在foo集合中有四个文档,如果要将他们全部删除,可以使用如下命令:
db.foo.remove()
当然,我们也可以指定过滤条件。remove函数接受一个文档作为可选参数,给定这个参数之后,符合条件的文档才会被删除。
例如,如果要删除mailing.list集合中所有 "opt-out" 为 true 的人:
db.mailing.list.remove({ "opt-out" : true })
删除数据是永久性的,不能撤销。
删除文档的速度通常很快,但是如果要清空整个集合,那么使用 drop 直接删除集合会更快。例如,我们先插入100万测试数据:
for(var i = 0; i < 100000; i++){ db.tester.insert({"foo" : "bar" , "bar" : i , "z" : 10-i }) }
首先我们使用remove函数进行删除,记录它消耗的时间
> var timeRemoves = function() { var start = (new Date()).getTime(); db.tester.remove({}); var timeDiff = (new Date()).getTime() - start; print("删除操作消耗了: " + timeDiff + " 毫秒"); } > timeRemoves() 删除操作消耗了: 2 毫秒
可以看到只消耗了2毫秒,这得益于4.0版本的优化,如果使用2.x版本的,可能需要几秒钟。但是如果使用 db.tester.drop() 代替 remove ,可以看到结果在1毫秒左右。
三、更新