具体详细函数请参阅MongoDB文档
数据库
- 创建以及切换数据库(第一次创建数据库并不真正的创建数据库, 只有插入第一条数据之后数据库才会真正创建)
use DATABASE_NAME
- 查看当前数据库
db
- 查看所有数据库
show dbs
- 删除数据库(要切换到对应的数据库下)
db.dropDatabase()
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
>
> use testoob
switched to db testoob
>
> db
testoob
>
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
>
>
> db.testoob.insertOne({})
{
\"acknowledged\" : true,
\"insertedId\" : ObjectId(\"5c1b52afb00d4fb0d9ef58a7\")
}
>
>
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
testoob 0.000GB
>
> db
testoob
>
> db.dropDatabase()
{ \"dropped\" : \"testoob\", \"ok\" : 1 }
>
集合
- 创建集合
1. db.createCollection(name, options)
2. db.COLLECTION_NAME.insert({}) --> 当你插入一些文档时,MongoDB 会自动创建集合。
| 字段 | 类型 | 描述 |
|---|---|---|
| capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
| autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
| size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。 如果 capped 为 true,也需要指定该字段。 |
| max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
- 查看已有集合
show collections / show tales
- 删除集合
db.COLLECTION_NAME.drop()
>
> use test
switched to db test
>
> show tables
>
> show collections
>
> db.createCollection(\"user01\")
{ \"ok\" : 1 }
>
> show tables
user01
>
> db.createCollection(\"user02\",{capped:true, autoIndexId: true, size: 6142800, max:10000})
{
\"note\" : \"the autoIndexId option is deprecated and will be removed in a future release\",
\"ok\" : 1
}
>
> show tables
user01
user02
>
> db.user01.drop()
true
>
> db.user02.drop()
true
>
文档
- 插入文档(insert)
db.COLLECTION_NAME.insertOne(
<document>,
{
writeConcern: <document>
}
)
writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)
db.COLLECTION_NAME.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
ordered :
可选的。如果true,在数组中执行文档的有序插入,并且如果其中一个文档发生错误,MongoDB将返回而不处理数组中的其余文档。
如果false执行无序插入,并且如果其中一个文档发生错误,则继续处理阵列中的其余文档。
- 插入文档(save)
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)
区别: save() 方法如果不指定 _id 字段类似于 insert() 方法。如果指定 _id 字段,则会更新 匹配 该 _id 的数据。
>
> db.users.insert({name:\"user001\", age:18})
WriteResult({ \"nInserted\" : 1 })
>
>
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
>
> db.users.save({\"_id\": 123114, \"name\":\"user001\", age:18})
WriteResult({ \"nMatched\" : 0, \"nUpserted\" : 1, \"nModified\" : 0, \"_id\" : 123114 })
>
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user001\", \"age\" : 18 }
>
> db.users.save({\"_id\": 123114, \"name\":\"user003\", age:18})
WriteResult({ \"nMatched\" : 1, \"nUpserted\" : 0, \"nModified\" : 1 })
>
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user003\", \"age\" : 18 }
>
>
> db.users.insert({\"name\":\"user004\", \"name\":\"user005\"})
WriteResult({ \"nInserted\" : 1 })
>
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user003\", \"age\" : 18 }
{ \"_id\" : ObjectId(\"5c1b61d7b00d4fb0d9ef58ac\"), \"name\" : \"user005\" }
>
>
> db.users.insert({\"name\":\"user006\",\"NAME\":\"user007\"})
WriteResult({ \"nInserted\" : 1 })
>
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user003\", \"age\" : 18 }
{ \"_id\" : ObjectId(\"5c1b61d7b00d4fb0d9ef58ac\"), \"name\" : \"user005\" }
{ \"_id\" : ObjectId(\"5c1b626db00d4fb0d9ef58ad\"), \"name\" : \"user006\", \"NAME\" : \"user007\" }
>
注意:
- 同一文档中不能存在相同的 key, 存在相同的key后面的数据会把前面的数据覆盖掉
- 文档中键值区分大小写
- 查询
db.collection.findOne(query, projection).pretty()
db.collection.find(query, projection).pretty()
query : 可选, 指定的查询条件
projection : 可选, 使用投影操作符返回制定的键, 当查询全部键值可以忽略 1: 返回 0: 忽略
pretty() : 以格式化的方式显示所有文档
db.users.findOne({name:\"user001\"},{name:1}) √
db.users.findOne({name:\"user001\"},{_id : 0}) √
db.users.find({name:\"user001\"},{name:1, age: 0}) × projection不能混合使用
查询条件
| 描述 | 格式 | 范例 | RDBMS中的类似语句 |
|---|---|---|---|
| 等于 | {<key>:<value>} |
db.users.find({\"name\":\"user001\"}).pretty() |
where name = \'user001\' |
| 小于 | {<key>:{$lt:<value>}} |
db.col.find({\"age\":{$lt:20}}).pretty() |
where age < 50 |
| 小于或等于 | {<key>:{$lte:<value>}} |
db.users.find({\"age\":{$lte:20}}).pretty() |
where age <= 50 |
| 大于 | {<key>:{$gt:<value>}} |
db.users.find({\"age\":{$gt:50}}).pretty() |
where age > 20 |
| 大于或等于 | {<key>:{$gte:<value>}} |
db.users.find({\"age\":{$gte:50}}).pretty() |
where age >= 20 |
| 不等于 | {<key>:{$ne:<value>}} |
db.users.find({\"age\":{$ne:50}}).pretty() |
where age != 20 |
AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。类似于 RDBMS 中的
WHERE key1 = value1 AND key2 = value2
语法格式如下:
db.COLLECTION_NAME.find({key1:value1, key2:value2}).pretty()
OR 条件
MongoDB OR 条件语句使用了关键字 $or,类似于RDBMS 中的 WHEHRE key1 = value1 OR key2 = value2
语法格式如下:
db.COLLECTION_NAME.find({$or[{kay1:value1},{key2:value2}]}).pretty()
- 删除
删除一个
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)
collation : 可选, 要用于操作的排序规则, 详情请参阅排序文档。
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
删除多个
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
删除一个或多个
db.collection.remove(
<query>,
<justOne>
)
justOne :<boolean> true : 只删除第一个 false :删除多个
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>,
collation: <document>
}
)
justOne :<boolean> true : 只删除第一个 false :删除多个
writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)
collation : 可选, 要用于操作的排序规则, 详情请参阅排序文档。
- 更新
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
query: 查询条件
udpate: 更新字段 $set, $uset, $inc, 如果替换所有都不加
upsert: 可选,如果upsert是true且没有文档与查询条件匹配,则update()插入单个文档, 如果upsert是true且存在与查询条件匹配的文档,则update()执行更新。如果 upsert为true 时, 最好添加唯一索引
**multi **: 可选的,如果设置为true,则更新符合query 条件的多个文档。如果设置为false,则更新一个文档。默认值为false。有关其他信息,请参阅多参数。
writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)
collation : 可选, 要用于操作的排序规则, 详情请参阅排序文档。
arrayFilters: 可选的,一组过滤器文档,用于确定要为阵列字段上的更新操作修改哪些数组元素。对文档内的列表进行筛选.
##更新元素匹配arrayFilters条件
db.students.insert([
{ \"_id\" : 1, \"grades\" : [ 95, 92, 90 ] },
{ \"_id\" : 2, \"grades\" : [ 98, 100, 102 ] },
{ \"_id\" : 3, \"grades\" : [ 95, 110, 100 ] }
])
---------------------------------------------------------
db.students.update(
{ grades: { $gte: 100 } },
{ $set: { \"grades.$[element]\" : 100 } },
{
multi: true,
arrayFilters: [ { \"element\": { $gte: 100 } } ]
}
)
---------------------------------------------------------
{ \"_id\" : 1, \"grades\" : [ 95, 92, 90 ] }
{ \"_id\" : 2, \"grades\" : [ 98, 100, 100 ] }
{ \"_id\" : 3, \"grades\" : [ 95, 100, 100 ] }
##更新文档数组的特定元素
{
\"_id\" : 1,
\"grades\" : [
{ \"grade\" : 80, \"mean\" : 75, \"std\" : 6 },
{ \"grade\" : 85, \"mean\" : 90, \"std\" : 4 },
{ \"grade\" : 85, \"mean\" : 85, \"std\" : 6 }
]
}
{
\"_id\" : 2,
\"grades\" : [
{ \"grade\" : 90, \"mean\" : 75, \"std\" : 6 },
{ \"grade\" : 87, \"mean\" : 90, \"std\" : 3 },
{ \"grade\" : 85, \"mean\" : 85, \"std\" : 4 }
]
}
-------------------------------------------------------
db.students2.update(
{ },
{ $set: { \"grades.$[elem].mean\" : 100 } },
{
multi: true,
arrayFilters: [ { \"elem.grade\": { $gte: 85 } } ]
}
)
--------------------------------------------------------
{
\"_id\" : 1,
\"grades\" : [
{ \"grade\" : 80, \"mean\" : 75, \"std\" : 6 },
{ \"grade\" : 85, \"mean\" : 100, \"std\" : 4 },
{ \"grade\" : 85, \"mean\" : 100, \"std\" : 6 }
]
}
{
\"_id\" : 2,
\"grades\" : [
{ \"grade\" : 90, \"mean\" : 100, \"std\" : 6 },
{ \"grade\" : 87, \"mean\" : 100, \"std\" : 3 },
{ \"grade\" : 85, \"mean\" : 100, \"std\" : 4 }
]
}
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。


