数据库操作
创建数据库
- MongoDB 用 use + 数据库名称 的方式来创建数据库。use 会创建一个新的数据库,如果该数据库存在,则返回这个数据库。
格式
use DATABASE_NAME
使用db查看当前操作的数据库
db
使用show dbs检查数据库列表
show dbs
需要至少插入一个文档才会显示在列表中新添加的“DATABASE_NAME”数据库。
db.user.insert({"name":"DATABASE_NAME"})
注:在 MongoDB 中,默认的数据库是 test,如果你没有创建任何数据库,那么集合就会保存在 test 数据库中。
删除数据库
- MongoDB用dropDatabase() 命令删除已有的数据库。
格式
db.dropDatabase()
集合操作
创建集合
- MongoDB 用 db.createCollection(name, options) 方法创建集合。
格式
- db.createCollection(name, options)
其中,name 是集合名称,是一个字符串;options 是可选项,是一个文档,指定内存大小和索引等选项,具体参数说明如下表:
字段 | 类型 | 说明 |
---|---|---|
capped | 布尔 | (可选)如果为 true,表示为固定集合。固定集合是指具有固定存储空间的集合。当该值为 true 时,必须指定 size 参数。 |
autoIndexID | 布尔 | (可选)如果为 true,在 _id 字段自动创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。 |
如果 capped 为 true,也需要指定该字段。 | ||
max | 数值 | (可选)为固定集合指定文档的最大数量。 |
注:1.如果 collection 达到最大存储限制(size)之前达到最大文档数量(max)会删除旧文档。
2.MongoDB 会先检查size值,然后再检查max值
范例
创建一个集合"user",为字段_id创建索引,最大存储空间是10M,最大文档数量为1000
>db.createCollection("user", { capped : true, autoIndexID : true, size : 10485760, max : 1000 } )
{ "ok" : 1 }
>
说明
在 MongoDB 中,可以不用createCollection()方法创建集合,是因为在插入文档的时候,会自动创建集合
>db.myCollection.insert({"name" : "liruihuan"})
WriteResult({ "nInserted" : 1 })
>show collections
myCollection
user
>
其中,show collections 表示显示当前操作数据库内的所有集合。
删除集合
- MongoDB 用 db.collection.drop() 删除集合
格式
> db.COLLECTION_NAME.drop()
如果删除成功返回true,否则,返回false
范例
删除刚才创建的myCollection集合,并显示删除后的集合列表,验证是否删除成功
>db.myCollection.drop()
true
>show collections
user
>
文档操作
插入文档
- MongoDB 用 insert()或者save()向集合中插入文档
格式
db.collection.insert(document)
范例
db.user.find()
db.user.insert({"name":"user1","age":19})
文档查询用 find() 方法
插入文档也可以使用 db.collection.save(document) 命令。如果不指定 _id 字段 save() 方法类似于
insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。save() 方法会在下面 更新文档 里面用范例说明。
更新文档
- MongoDB 用 update() 或者 save() 更新集合中的文档
update()
- update() 更新已经存在文档的值
格式
db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
范例
在集合"user"中,将文档原来的name值"user1"更新为"user2",更新之前先查询集合"user"中存在的文档,然后再查询更新以后的所有文档,以便确定是否更新成功
> db.user.find()
> db.user.update({'name':'user1'},{$set:{'name':'user2'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息
> db.user.find()
上面范例只会更新第一条发现的文档,若想更新全部发现的文档,则需要用 multi:true ,具体写法如下
db.user.update({'name':'user1'},{$set:{'name':'user2'}},{multi:true})
上文中用到了更新操作符 s e t , 诸 如 此 类 的 还 有 : set,诸如此类的还有: set,诸如此类的还有:inc、 u n s e t 、 unset、 unset、push、$ne等。感兴趣的伙伴们可以到网上查查具体的含义。
save()
-
save() 方法通过传入的文档来替换已有文档。
格式db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
范例
用 _id = ‘58e1d2f0bb1bbc3245fa754b’ 的文档替换原来的文档,更新之前先查询集合"user"中存在的文档,然后再查询更新以后的所有文档,以便确定是否更新成功db.user.find()
{ “_id” : ObjectId(“58e1d2f0bb1bbc3245fa754b”), “name” : “xxx”, “age” : 18 }db.user.save(
{
“_id” : ObjectId(“58e1d2f0bb1bbc3245fa754b”), “name”:“user3”, “age”:20
}
)
WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 }) # 输出信息db.user.find()
{ “_id” : ObjectId(“58e1d2f0bb1bbc3245fa754b”), “name” : “user3”, “age” : 20 }
删除文档
- MongoDB 用 remove() 删除集合中的文档
格式
db.COLLECTION_NAME.remove(DELLETION_CRITTERIA,justOne)
justOne 如果设为 true 或 1,则只删除一个文档。
范例
删除 name 为 ‘user1’ 的文档,删除之前先查询集合"user"中存在的文档,然后再查询删除以后的所有文档,以便确定是否删除成功
> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "xxx", "age" : 18 }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754c"), "name" : "user1", "age" : 19 }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 20 }
>db.user.remove({"name":"user1"})
WriteResult({ "nRemoved" : 2 }) # 删除了两条数据
> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "xxx", "age" : 18 }
如果只想删除一条记录,则需要设置 justOne 为 1,如下所示:
db.user.remove({"name":"user1"},1)
如果想删除所有记录,可以这样写
db.user.remove({})