您的位置:首页 > 数据库 > Mongodb

MongoDB自学笔记9---4.1 插入文档

2013-08-14 20:22 176 查看
第四章 详解增删改查

对于数据库来说,如果我们不是DBA使用的最多的是CRUD,如果我们学好了CRUD,将来我们操作数据库中的数据的时候,将会得心应手。本章将会详细的介绍mongodb中的CRUD操作。

4.1 插入文档

对于数据库的CRUD操作,所有的都应该起源于C,如果没有C其他的几个也就没有意义了,所以我们先介绍一下C,也就是插入文档。

在mongodb中可以使用insert或者save方法或者update方法将一个数据插入到一个集合中。

对于insert来说,如果被插入数据字集合中不存在,能够正常插入,如果已经存在集合中,将会无法插入。insert方法语法如下:

db.collection.insert( <document> )

例如我们将一个用户插入到user集合中,代码如下:

> db.user.insert({name:"xiangyue",age:23})

> db.user.find()

{ "_id" : ObjectId("519cbddfe9c1b21d76cc927c"), "name" : "xiangyue", "age" : 23 }

在我们插入文档的时候,如果我们没有为该文档指定_id,mongodb将会为我们的文档自动创建一个不会重复的ObjectId,关于ObjectId的具体信息查看3.2Mongodb数据类型。

如果我们在insert中传入了多个文档,mongodb只会插入第一个文档,下面的代码中只插入了第一个文档。

> db.test.find()

> db.test.insert({name:"user1"},{name:"user2"})

> db.test.find()

{ "_id" : ObjectId("519cd757f83727a8baf0a8e2"), "name" : "user1" }

如果我们想一次插入多个文档,可以将多个文档组合成一个数组,这样就能够插入成功了,例子代码如下:

> db.test.find()

> db.test.insert([{name:"user1"},{name:"user2"}])

> db.test.find()

{ "_id" : ObjectId("519cd842f83727a8baf0a8e3"), "name" : "user1" }

{ "_id" : ObjectId("519cd842f83727a8baf0a8e4"), "name" : "user2" }

我们可以使用javascript批量插入数据。由于mongodb shell简单的说就是一个javascript shell所以javascript代码可以在mongodb shell中运行,所以我们可以使用javascript代码进行批量插入数据,例如我们插入10个用户到user集合中,代码如下:

> for(i=1;i<=10;i++){

... db.user.insert({_id:i,name:"user"+i,age:10+i})

... }

> db.user.find()

{ "_id" : ObjectId("519cbddfe9c1b21d76cc927c"), "name" : "xiangyue", "age" : 23 }

{ "_id" : 1, "name" : "user1", "age" : 11 }

{ "_id" : 2, "name" : "user2", "age" : 12 }

{ "_id" : 3, "name" : "user3", "age" : 13 }

{ "_id" : 4, "name" : "user4", "age" : 14 }

{ "_id" : 5, "name" : "user5", "age" : 15 }

{ "_id" : 6, "name" : "user6", "age" : 16 }

{ "_id" : 7, "name" : "user7", "age" : 17 }

{ "_id" : 8, "name" : "user8", "age" : 18 }

{ "_id" : 9, "name" : "user9", "age" : 19 }

{ "_id" : 10, "name" : "user10", "age" : 20 }

对于save方法,如果被插入数据不存在集合中,正常插入,如果存在,则更新该数据。save方法语法如下:

db.collection.insert( <document> )

例子代码:

> db.test.find()

{ "_id" : 1, "name" : "xiangyue", "age" : 23 }

{ "_id" : 2, "name" : "zhangsan", "age" : 23 }

> db.test.save({_id:3,name:"lisi",age:24}) /*集合中不存在,插入数据*/

> db.test.find()

{ "_id" : 1, "name" : "xiangyue", "age" : 23 }

{ "_id" : 2, "name" : "zhangsan", "age" : 23 }

{ "_id" : 3, "name" : "lisi", "age" : 24 }

> db.test.save({_id:3,name:"wangwu",age:25}) /*数据库中存在该数据,更新该数据*/

> db.test.find()

{ "_id" : 1, "name" : "xiangyue", "age" : 23 }

{ "_id" : 2, "name" : "zhangsan", "age" : 23 }

{ "_id" : 3, "name" : "wangwu", "age" : 25 }

对于update,我们看到这个方法我们想到的这个是更新一个文档的,怎么还能插入呢,但是官方就使update能够插入数据。Update方法有一个参数upsert参数,如果设置为true的话,如果被更新的文档不存在将会插入该文档,这个就类似save方法了。Upsert默认为false,所以默认情况下,如果查找不到需要更新的数据,则并不会更新该数据了。对于update方法这里只是简单给出一个例子代码,具体介绍请看4.4更新文档:

> db.test.find()

{ "_id" : 1, "name" : "xiangyue", "age" : 23 }

{ "_id" : 2, "name" : "zhangsan", "age" : 23 }

{ "_id" : 3, "name" : "wangwu", "age" : 26 }

> db.test.update({_id:4},{_id:4,name:"lisi",age:26})

> db.test.find()

{ "_id" : 1, "name" : "xiangyue", "age" : 23 }

{ "_id" : 2, "name" : "zhangsan", "age" : 23 }

{ "_id" : 3, "name" : "wangwu", "age" : 26 }

> db.test.update({_id:4},{_id:4,name:"lisi",age:26},{upsert:1}) /*设置了upsert为true后,数据不存在的时候插入了*/

> db.test.find()

{ "_id" : 1, "name" : "xiangyue", "age" : 23 }

{ "_id" : 2, "name" : "zhangsan", "age" : 23 }

{ "_id" : 3, "name" : "wangwu", "age" : 26 }

{ "_id" : 4, "name" : "lisi", "age" : 26 }

4.1.1不安全写操作

MongoDB为了追求赢得基准测试导致它默认以不安全的方式进行写操作。 如果你不调用getLastError(),MongoDB会在写操作实际完成之前就返回了,但是用户并不知道这次写操作失败了。所以使用mongodb的时候对于数据的完整性要求高的应用程序,需要调用getLastError方法,确认正确的写入了数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: