MongoDB 基本使用

起步
安装
brew install mongodb

# 遇到 Error: An unexpected error occurred during the `brew link` step 解决方法
# 参考 https://blog.csdn.net/qq_24909089/article/details/83378210
sudo mkdir /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks
启动
# 启动服务器
mkdir -p ./mongodb/data/db
mongod --dbpath ./mongodb/data/db

# 启动客户端
mongo
小试牛刀
查看数据库

show dbs

admin 0.000GB
config 0.000GB
local 0.000GB

创建/进入数据库

use test

switched to db test
查看当前数据库

db

test
插入文档

db.myCollection.insert({‘fruit’: ‘apple’})

WriteResult({ "nInserted" : 1 })
查看文档

db.myCollection.find()

{ "_id" : ObjectId("5cd6931cb2978f4bd9becafc"), "fruit" : "apple" }
查看当前数据库的所有集合

show tables 或 show collections

myCollection
删除文档

db.myCollection.remove()

WriteResult({ "nRemoved" : 1 })
删除集合

db.myCollection.drop()

true
删除当前数据库

db.dropDatabase()

{ "dropped" : "test", "ok" : 1 } 
更新 update(query, update, upsert, multi)
$inc 增加计数

数据准备
db.myCollection.insert({“fruit”: “banana”, “count”: 1})

增加 3
db.myCollection.update({“fruit”: “banana”}, {$inc: {“count”: 3}})
db.myCollection.find()

# 由 1 变成 4
{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4 }
$set 设置字段值(若不存在则创建,已存在则覆盖),$unset 删除字段

增加字段 owner
db.myCollection.update({“fruit”: “banana”}, {"$set": {“owner”: “xchenhao”}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : "xchenhao" }

已存在情况下则覆盖原有
db.myCollection.update({“fruit”: “banana”}, {"$set": {“owner”: “somebody”}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : "somebody" }

删除字段
db.myCollection.update({“fruit”: “banana”}, {"$unset": {“owner”: 1}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4 }
$push 对数组追加元素

db.myCollection.update({“fruit”: “banana”}, {KaTeX parse error: Expected 'EOF', got '}' at position 28: …r": "xchenhao"}}̲) db.myCollecti…push: {“owner”: “somebody”}})
db.myCollection.update({“fruit”: “banana”}, {$push: {“owner”: “somebody”}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody", "somebody" ] }
$pop 从数组元素中弹出元素(1 从尾部,-1 从头部)

db.myCollection.update({“fruit”: “banana”}, {$pop: {“owner”: 1}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody" ] }
$addToSet 添加到集合中(若已存在则不会增加)

KaTeX parse error: Expected '}', got 'EOF' at end of input: …": "banana"}, {addToSet: {“owner”: {$each: [“somebody”, “someone”]}}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody", "someone" ] }

db.myCollection.update({“fruit”: “banana”}, {$pop: {“owner”: -1}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "somebody", "someone" ] }
$pull 删除数组中完全匹配的元素

db.myCollection.update({“fruit”: “banana”}, {$push: {“owner”: “somebody”}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "somebody", "someone", "somebody" ] }

db.myCollection.update({“fruit”: “banana”}, {$pull: {“owner”: “somebody”}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "someone" ] }
$set 的补充说明:对数组中的某个位置元素进行更新

准备数据
db.myCollection.update({“fruit”: “banana”}, {$set: {“owner”: [“xchenhao”, “somebody”, “someone”]}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody", "someone" ] }

对数组第一个元素进行更新
db.myCollection.update({“fruit”: “banana”}, {$set: {“owner.0”: “whoami”}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "whoami", "somebody", "someone" ] }

不知道位置则用 $ 代替(查找到的位置)
db.myCollection.update({“owner”: “whoami”}, {KaTeX parse error: Expected '}', got 'EOF' at end of input: set: {"owner.": “It is me”}})
db.myCollection.find()

{ "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "It is me", "somebody", "someone" ] }
update 第三个参数 upsert(是否在不存在的情况下进行插入)

db.fruit.find()
db.fruit.update({“name”: “apple”}, {$set: {“count”: 100}}, true)

WriteResult({
        "nMatched" : 0,
        "nUpserted" : 1,
        "nModified" : 0,
        "_id" : ObjectId("5cd6a66105b099b1e534eaed")
})

db.fruit.find()

{ "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 100 }

db.fruit.update({“name”: “apple”}, {$set: {“count”: 999}}, true)
db.fruit.find()

{ "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }
save() 更新或创建(更新时需要指定 _id)

db.fruit.save({“name”: “banana”, “count”: 10})

WriteResult({ "nInserted" : 1 })

db.fruit.find()

{ "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }
{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 10 }

db.fruit.save({"_id": ObjectId(“5cd6a6a0b2978f4bd9becafe”), “name”: “banana”, “count”: 800})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.fruit.find()

{ "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }
{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 800 }
update 第四个参数是否更新多个文档(默认只更新找到的第一个文档)

db.fruit.find()

{ "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }
{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 800 }

db.fruit.update({}, {$inc: {“count”: -100}}, false, false)

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.fruit.find()

{ "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 899 }
{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 800 }

db.fruit.update({}, {$inc: {“count”: -100}}, false, true)

WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

db.fruit.find()

{ "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 799 }
{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 700 }

获取上次执行的反馈信息
db.runCommand({getLastError: 1})

{
        "connectionId" : 1,
        "n" : 0,
        "syncMillis" : 0,
        "writtenTo" : null,
        "err" : null,
        "ok" : 1
}
查询 find(query, show_fields)

db.food.find()

{ "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
{ "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8 }
{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

第二参数指定是否输出(0 为不输出,除了 _id 外,其它需全为 1 或 0)
参考 https://www.runoob.com/mongodb/mongodb-query.html
db.food.find({}, {“name”: 1, “_id”: 0})

{ "name" : "薯条" }
{ "name" : "炸鸡" }
{ "name" : "热狗" }

查询 count 小于 10
db.food.find({“count”: {$lt: 10}})

{ "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8 }

查询 count 大于 10 且小于 20
db.food.find({“count”: {$gt: 10, $lt: 20}})

{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

查询 name 不等于 炸鸡
db.food.find({“name”: {$ne: “炸鸡”}})

{ "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

查询 name 属于在热狗、薯条之中的
db.food.find({“name”: {$in: [“热狗”, “薯条”]}})

{ "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

查询 name 为薯条或炸鸡
db.food.find({$or: [{“name”: “薯条”}, {“name”: “炸鸡”}]})

{ "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
{ "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8 }

db.food2.find()

{ "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条", "style" : [ "微辣", "香辣" ] }
{ "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8, "style" : [ "微辣", "香辣" ] }
{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }

查询 style 包含香辣及微辣的
db.food2.find({“style”: {$all: [“香辣”, “微辣”]}})

{ "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条", "style" : [ "微辣", "香辣" ] }
{ "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8, "style" : [ "微辣", "香辣" ] }

查询 style 只有 1 个
db.food.find({“style”: {$size: 1}})

{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }

按 count 倒序排
db.food.find().sort({“count”: -1})

{ "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条", "style" : [ "微辣", "香辣" ] }
{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }
{ "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8, "style" : [ "微辣", "香辣" ] }

按 count 倒序排,跳过第 1 个,输出 1 个
db.food.find().sort({“count”: -1}).skip(1).limit(1)

{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }

格式化输出
db.food2.find().pretty()

{
        "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"),
        "count" : 30,
        "name" : "薯条",
        "style" : [
                "微辣",
                "香辣"
        ]
}
{
        "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"),
        "name" : "炸鸡",
        "count" : 8,
        "style" : [
                "微辣",
                "香辣"
        ]
}
{
        "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"),
        "name" : "热狗",
        "count" : 12,
        "style" : [
                "原味"
        ]
}
参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈挨踢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值