1常用命令
1.1插入文档
db.collection.insertOne({name:"sue", age: 19, status: "P"}) 向集合插入单个文档
db.users.insertMany(
[
{ name: "bob", age: 42, status: "A", },
{ name: "ahn", age: 22, status: "A", },
{ name: "xi", age: 34, status: "D", }
]) 向集合插入多个文档
db.collection.insert() 向集合插入一个或多个文档,用法如上
1.2查询文档
db.users.find( { status: "A"}) 相当于where status= "A"
db.users.find( { status: "A", age:{ $lt: 30 } } ) 相当于where status= "A" andage<30
db.users.find( { status: { $in: ["P", "D" ] } } ) 相当于where status in ["P","D"]
db.users.find({$or: [ { status:"A" }, { age: { $lt: 30 } } ] }) 相当于where status="A" or age<30
db.users.find( { favorites: { artist:"Picasso", food: "pizza" } } )
favorites是嵌套类型,里面的artist字段为"Picasso", food字段为"pizza"的结果
db.users.find( {"favorites.artist": "Picasso" } ) 跟上面类似
db.users.find( { status: "A" }, { name: 1, status: 1 } ) 只返回了匹配文档的 name , status 以及默认的 _id 字段
db.users.find( { name: null } ) 返回name字段为null或者不包含name字段的文档
db.users.find( { name : { $exists: false } } ) 返回不包含name字段的文档
1.3更新文档
db.collection.updateOne() 更新最多一个匹配指定过滤条件的文档
db.collection.updateMany() 更新所有匹配上指定过滤条件的文档
db.collection.replaceOne() 替换最多一个匹配指定过滤条件的文档,即使可能有多个文档匹配上指定的过滤条件.
db.collection.update() 更新或者替换一个匹配指定过滤条件的文档或者更新所有匹配指定过滤条件的文档。默认情况下, db.collection.update() 更新一个 文档.要更新多个文档,使用 multi 选项。
以上四种,如果包含upsert : true 并且没有文档匹配指定的过滤器,那么此操作会创建一个新文档并插入它.如果有匹配的文档,那么此操作修改或替换匹配的单个或多个文档.
举例:
db.collection.updateOne({ status: "A"},{ $set: { "age":11, type: 3 }})
db.collection.update({ status: "A"},{ $set: { "age":11, type: 3 }}, { multi: true })
db.users.replaceOne(
{ name: "abc" },
{ name: "amy",age: 34, type: 2, status: "P", favorites: { "artist":"Dali", food: "donuts" } })
db.users.update(
{ name: "xyz" },
{ name: "mee",age: 25, type: 1, status: "A", favorites: { "artist":"Matisse", food: "mango" } }
)
1.4删除文档
db.collection.remove() 删除一个或者多个匹配指定过滤条件的文档
db.collection.deleteOne() 删除最多一个匹配指定过滤条件的文档,即使可能有多个文档匹配上指定的过滤条件.
db.collection.deleteMany() 删除所有匹配指定过滤条件的文档.
举例:
db.users.deleteMany({}) 删除所有文档
db.users.remove({}) 删除所有文档
db.users.remove( { status : "P" }) 删除所有符合条件的文档
db.users.remove( { status: "D" },1) 删除符合条件的第一个文档
1.5其他
mongo 进入MongoDB终端(未分片)
mongo localhost:20000 进入MongoDB终端(分片,20000为mongos的端口)
show databases或者show dbs 显示所有数据库
use dbname 进入数据库
show collections或者show tables 显示所有集合(表)
db 显示当前所在数据库
db.dropDatabase() 删除当前数据库
db.tablename.drop() 删除集合
db.tablename.remove({}) 清空集合
db.tablename.ensureIndex({"title":1})创建索引,1:升序, -1:降序
2数据类型
2.1 Embedded Data -
内嵌数据可以让应用程序把相关的数据保存在同一条数据库记录里面。这样一来,应用程序就可以发送较少的请求给MongoDB数据库来完成常用的查询及更新请求。
一般来说,下述情况建议使用内嵌数据:
- 数据对象之间有 “contains” (包含) 关系。
- 数据对象之间有一对多的关系。 这些情况下 “多个”或者子文档会经常和父文档一起被显示和查看。
通常情况下,内嵌数据会对读操作有比较好的性能提高,也可以使应用程序在一个单个操作就可以完成对数据的读取。同时,内嵌数据也对更新相关数据提供了一个原子性写操作。
2.1 References –
一般来说,在下述情况下可以使用规范化模型:
- 当内嵌数据会导致很多数据的重复,并且读性能的优势又不足于盖过数据重复的弊端时候。
- 需要表达比较复杂的多对多关系的时候。
- 大型多层次结构数据集。
引用比内嵌要更加灵活一些。 但客户端应用必须使用二次查询来解析文档内包含的引用。换句话说,对同样的操作来说,规范化模式会导致更多的网络请求发送到数据库服务器端。
2.3 数组
db.categories.insert( { _id:"MongoDB", ancestors: [ "Books", "Programming","Databases" ]})
db.categories.createIndex( { ancestors: 1 }) 创建索引
db.categories.find( { ancestors:"Programming" } ) 可以根据数组的某一项查询
2.4 其他
Type | Number | Alias | Notes |
Double | 1 | “double” | 浮点数,例如 3.8 |
String | 2 | “string” | 字符串,例如 “a” |
Object | 3 | “object” | 对象引用,例如 { "$ref" : "creators", "$id" : ObjectId("5126bc054aed4daf9e2ab772"), "$db" : "users" } |
Array | 4 | “array” | 数组,例如 [1,6,8] |
Binary data | 5 | “binData” | 二进制数据,例如 BinData(0,"aGVsbG8=") |
Undefined | 6 | “undefined” | Deprecated,已废弃 |
ObjectId | 7 | “objectId” | 例如: ObjectId("58c63e6b66b16d41d241d498") |
Boolean | 8 | “bool” | 布尔值,例如 true |
Date | 9 | “date” | 日期,例如: ISODate("2017-03-20T03:06:32.964Z") |
Null | 10 | “null” | 空 |
Regular Expression | 11 | “regex” | 正则表达式,例如 { email: { $regex: /@mongodb\.com$/ } } |
DBPointer | 12 | “dbPointer” | Deprecated,已废弃 |
JavaScript | 13 | “javascript” | JavaScript代码,例如 {“x”:function(){/*…*/}} |
Symbol | 14 | “symbol” | Deprecated,已废弃 |
JavaScript (with scope) | 15 | “javascriptWithScope” | 不明 |
32-bit integer | 16 | “int” | 32位整型,例如26 |
Timestamp | 17 | “timestamp” | 时间戳,例如 Timestamp(1489979070, 1) BSON timestamp类型是在MongoDB内部使用的 |
64-bit integer | 18 | “long” | 64位长整形,例如 NumberLong(12345677) |
Decimal128 | 19 | “decimal” | New in version 3.4 高精度128位,浮点型,例如 NumberDecimal("1489980328534") |
Min key | -1 | “minKey” | { "$minKey": 1 } |
Max key | 127 | “maxKey” | { "$maxKey": 1 } |