MongoDB Shell简单入门(增删改查)
来源:互联网 发布:我的淘宝 编辑:程序博客网 时间:2024/06/06 01:45
一、MongoDB文档结构
在MongoDB中一条记录对应于一个field-value键值对类型的BSON文档,其结构类似JSON对象。MongoDB文档中的value可以包含各种各样的类型,包括数组、文档、文档数组和内置类型。
{
“_id” : ObjectId(“54c955492b7c8eb21818bd09”),
“address” : {
“street” : “2 Avenue”,
“zipcode” : “10075”,
“building” : “1480”,
“coord” : [ -73.9557413, 40.7720266 ]
},
“borough” : “Manhattan”,
“cuisine” : “Italian”,
“grades” : [
{
“date” : ISODate(“2014-10-01T00:00:00Z”),
“grade” : “A”,
“score” : 11
},
{
“date” : ISODate(“2014-01-16T00:00:00Z”),
“grade” : “B”,
“score” : 17
}
],
“name” : “Vella”,
“restaurant_id” : “41704620”
}
MongoDB将诸多文档(document)存储到集合(collection)中,集合就类似于关系数据库中的表,只不过在关系数据库中同一张表中的所有记录要有相同的关系模式(schema),而在MongoDB中一个集合内的文档不需要有相同的field。
二、MongoDB Shell导入数据
以下操作需要确保机器上的mongod程序(服务)已经运行,并通过MongoDB安装目录下的mongo命令打开mongo shell。
本文使用官方给的样本数据进行说明,通过下面链接可以获取到源数据的json格式文件
https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
运行以下命令导入数据:
mongoimport –db test –collection restaurants –drop –file ~/downloads/primer-dataset.json
导入完成后选中需要操作的数据库,在这里就是我们刚刚导入数据的test数据库
use test
三、MongoDB Shell查询操作
(一)查询所有文档
db.restaurants.find()
上述操作会返回指定collection内的所有文档的游标(cursor),可以通过保存到一个var变量中遍历游标来查看所有文档。但MongoDB默认会在上述操作之后显示20个文档,然后输入命令 it 可以在显示器上遍历所有文档:
it
还可以通过在上面的查询命令后面添加 pretty(),可以以类似json格式一样的格式化视图查看返回的文档数据。
db.restaurants.find().pretty()
(二)指定等价条件
等价查询命令一般具有以下格式:
{ <field1>: <value1>, <field2>: <value2>, … }
如果<field>是最高级别的field而不是内嵌文档或数组内的field,那么查询中的field的双引号可以省去,其他情况不可省去。
最高级别
db.restaurants.find( { borough: “Manhattan” } )
内嵌文档或数组
指定查询条件的field若在内嵌文档或数组内,则需要用点号 (.) 分隔:db.restaurants.find( { “address.zipcode”: “10075” } ) //内嵌文档
db.restaurants.find( { “grades.grade”: “B” } ) //数组
(三)指定运算条件
MongoDB提供了许多运算符以便查询,具体请见下面链接:
https://docs.mongodb.com/manual/reference/operator/query-comparison/
除了 $or 和 $and ,其他运算符一般都具有以下形式:
{ <field1>: { <operator1>: <value1> } }
大于运算( $gt )
查询grades数组中存在一条以上score大于30的内嵌评价的餐厅:db.restaurants.find( { “grades.score”: { $gt: 30 } } )
小于运算( $lt )
查询grades数组中存在一条以上score小于10的内嵌评价的餐厅:db.restaurants.find( { “grades.score”: { $lt: 10 } } )
(四)组合运算
逻辑AND
可以通过逗号( , )分隔多个查询条件构成逻辑AND查询:db.restaurants.find( { “cuisine”: “Italian”, “address.zipcode”: “10075” } )
逻辑OR
通过使用 $or 运算符可以构成逻辑OR查询:db.restaurants.find(
{ $or: [ { “cuisine”: “Italian” }, { “address.zipcode”: “10075” } ] }
)
(五)排序查询结果
为对查询结果进行排序,可以在查询方法后面添加 sort() 方法。需要向sort()方法传递排序参照的field以及对应的排序类型值,例如:1代表升序,-1代表降序。
db.restaurants.find().sort( { “borough”: 1, “address.zipcode”: 1 } )
上面的命令操作将返回所有文档并先按borough升序排序(字典排序),然后相同borough的文档之中再按address.zipcode升序排序。
四、MongoDB Shell插入操作
向 insert() 方法传递一个BSON文档即可插入该文档。另外如果我们尝试讲一个文档插入(添加)到一个本不存在的collection中(这在MongoDB是可以的),MongoDB将为我们自动创建该collection。
下面操作将插入一个餐厅文档到test数据库restaurants集合中。注意,如果restaurants不存在,MongoDB将自动为我们创建。
db.restaurants.insert(
{
“address” : {
“street” : “2 Avenue”,
“zipcode” : “10075”,
“building” : “1480”,
“coord” : [ -73.9557413, 40.7720266 ]
},
“borough” : “Manhattan”,
“cuisine” : “Italian”,
“grades” : [
{
“date” : ISODate(“2014-10-01T00:00:00Z”),
“grade” : “A”,
“score” : 11
},
{
“date” : ISODate(“2014-01-16T00:00:00Z”),
“grade” : “B”,
“score” : 17
}
],
“name” : “Vella”,
“restaurant_id” : “41704620”
}
)
该操作会返回一个包含操作结果的WriteResult对象:
WriteResult({ “nInserted” : 1 })
如果传递给 insert() 方法的文档未包含 _id 字段,那么MongoDB将自动为我们创建并生成ObjectId作为 _id 的值。
五、MongoDB Shell更新操作
update() 操作一般可以分为两种,一种是仅 更新指定field,另一种是 替换整个文档。
默认地, update() 一次仅更新一个文档,如果想更新符合查询条件的多个文档,需要在 update() 方法中添加 multi 选项并设置为true。
更新操作也会返回一个包含操作结果的WriteResult对象。
(一)更新指定field
与查询一样,更新操作也可以分为最高等级和内嵌文档或数组两类。
最高等级
下面操作将使用 $set 运算符来更新 cuisine 字段的值,并使用 $currentDate 将 lastModified 字段的值更新为当前时间。db.restaurants.update(
{ “name” : “Juni” },
{
$set: { “cuisine”: “American (New)” },
$currentDate: { “lastModified”: true }
}
)
内嵌文档或数组
同查询操作,查询条件中包含内嵌文档或数组的field时,需要使用点号( . )进行分隔:db.restaurants.update(
{ “restaurant_id” : “41156888” },
{ $set: { “address.street”: “East 31st Street” } }
)
更新多个文档
在 update() 方法中使用 multi 选项可以同时更新多个符合条件的文档:db.restaurants.update(
{ “address.zipcode”: “10016”, cuisine: “Other” },
{
$set: { cuisine: “Category To Be Determined” },
$currentDate: { “lastModified”: true }
},
{ multi: true}
)
(二)替换整个文档
update() 方法还可以用于替换整个文档,但由于 _id 字段是不可修改的,因而只能更新文档的其他部分。
db.restaurants.update(
{ “restaurant_id” : “41704620” },
{
“name” : “Vella 2”,
“address” : {
“coord” : [ -73.9557413, 40.7720266 ],
“building” : “1480”,
“street” : “2 Avenue”,
“zipcode” : “10075”
}
}
)
上面操作将原来文档给替换成了只含 _id 、name、address字段的文档。
六、MongoDB Shell删除操作
remove() 方法可以用于删除文档。注意,remove() 方法默认会删除所有符合条件的文档,若想仅删除一个,则需要使用 justOne 选项。
删除操作也会返回一个包含操作结果的WriteResult对象
(一)删除符合条件的所有文档
db.restaurants.remove( { “borough”: “Manhattan” } )
上述操作将删除所有borough为Manhattan的文档。
(二)仅删除一个符合条件的文档
db.restaurants.remove( { “borough”: “Queens” }, { justOne: true } )
通过将 justOne 选项设置为true,可以仅删除符合条件的一个文档。
(三)删除所有文档
db.restaurants.remove( { } )
(四)删除Collection
该操作会删除所有collection内的文档和索引。
db.restaurants.drop()
drop() 方法执行成功会返回true:
true
否则则返回false。
- MongoDB Shell简单入门(增删改查)
- MongoDB入门(04)- 增删查改
- mongodb入门--增删改查
- mongodb-简单增删改查
- MongoDB入门(2)--增删改查
- MongoDB入门篇--增删改查
- MongoDB入门篇--增删改查
- MongoDB入门篇--增删改查
- MongoDB入门篇--增删改查
- 【MongoDb入门】细说增删查改
- mongodb入门增删改查建立索引
- MongoDB入门学习(2)增删改查
- mongodb实现简单的增删改查
- mongodb实现简单的增删改查
- MongoDB简单的增删改查
- mongodb 增删改查简单封装
- mongodb简单测试增删改查
- mongodb实现简单的增删改查
- 域名与二级域名(即子域名)
- 使用new创建数组
- 手动实现HashMap
- 关于实现背景为自动循环播放、无声的、宽度自适应视频的相关问题
- 主成分分析PCA
- MongoDB Shell简单入门(增删改查)
- mapper写法
- 11-散列2 Hashing (25分)
- #297. 【CTSC2017】密钥
- springmvc 4
- Android--AIDL基础介绍
- 推荐一款基于 Bootstrap 的 jQuery 表格插件Bootstrap table
- 5.27 JLL--实习日志--
- eclipse使用小技巧