(4)详解MongoDB的创建、更新、删除文档
2012-07-22 22:03
459 查看
1.插入
1.1命令:insert
1.2举例:
>db.blog.insert({"author":"tian","title":"myfirstmongodbblog"})
1.1命令:insert
1.2举例:
>db.blog.insert({"author":"tian","title":"myfirstmongodbblog"})
查询结果:
>db.blog.find()
{"_id":ObjectId("500bb4b44daafbf976598437"),"author":"tian","title":"my
firstmongodbblog"}
1.3说明:
1)当我们要插入的集合(这里是blog)不存在时,mongodb会在第一次插入式自动创建一个;
2)插入的每一条文档,除了我们制定的键(这里有2个键,author和title),还会自动增加一个_id键,相当于关系型数据库的主键,如果我们没有指定的话。
该键对于一个集合必须是唯一的,它可以使任意类型,默认是ObjectId对象。
由于mongodb一开始设计就是用来作为分布式数据库的,因此没有采用自增长的方式来创建_id键,因为在不同的服务器上同步自增长主键费时又费力。
关于ObjectId,更多可以参考:
当然我们也可以自己指定:
2.1命令:remove
2.2举例:
2)删除是永久性的,不能撤销,也不能恢复
3)删除文档的速度相当快,如果要删除整个集合里的文档,可以采用db.drop_collection(your-collection),然后重建集合和索引,该方法速度非常快,唯一的缺点是整个集合都被删除了,包括索引
4)根据_id键来删除文档的效率是最高的
5)考虑一种比较极端,或者高并发可能发生的情况,当你要删除一个集合里的文档时,刚好有另一个进程在update其中的文档,在这种情况下,正被update的文档是不会被删除的,如果这并不是你想要的,可以通过制定参数$atomic参数为true来删除所有满足条件的文档,如:db.blog.remove({"author":"tian",$atomic:true}),当然,这样做也是有副作用的,就是当我们执行remove操作的时候,将阻止其他操作。
3.更新
3.1命令:update
3.2举例:
>mypost.author="tian.chen"
tian.chen
>mypost
{
"_id":ObjectId("500bc4304daafbf976598439"),
"author":"tian.chen",
"title":"myfirstmongodbblog"
}
>db.blog.update({"_id":ObjectId("500bc4304daafbf976598439")},mypost)
>db.blog.findOne({"_id":ObjectId("500bc4304daafbf976598439")})
{
"_id":ObjectId("500bc4304daafbf976598439"),
"author":"tian.chen",
"title":"myfirstmongodbblog"
}