登录
# 指定端口登录
[root@thinkvm ~]# mongosh --port 7017
Current Mongosh Log ID: 61cdcd374eaf61ade203fac8
Connecting to: mongodb://127.0.0.1:7017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB: 5.0.5
Using Mongosh: 1.1.7
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
# 切换数据库
test> use think_db;
switched to db think_db
# 使用账号/密码认证身份
think_db> db.auth("thinktik","Secure_123@mon")
{ ok: 1 }
think_db>
基本CRUD操作
insert
If the collection does not currently exist, insert operations will create the collection.
In MongoDB, each document stored in a collection requires a unique _id field that acts as a primary key.
If an inserted document omits the _id field, the MongoDB driver automatically generates an ObjectId for the _id field.
This also applies to documents inserted through update operations with upsert: true.
单条插入
# 查询当前所在的数据库名
think_db> db
think_db
# 查询当前库中的表
think_db> show tables;
# 查询当前库中的表
think_db> show collections;
# 插入一条数据(首次插入会自动创建集合)
think_db> db.user.insertOne({'username':'thinktik','password':'12312','gender':'male'})
{
acknowledged: true,
insertedId: ObjectId("61cdcece9f80920a9868f6fd")
}
# 查询当前库中的表
think_db> show collections;
user
think_db>
多条插入
think_db> db.user.insertMany([
{'username':'andy','password':'tertert','gender':'male'},
{'username':'jessy','password':'jfhrtyrt','gender':'famale'},
{'username':'tom','password':'jtjtyjty','gender':'male'}
])
{
acknowledged: true,
insertedIds: {
'0': ObjectId("61cdcfc99f80920a9868f6fe"),
'1': ObjectId("61cdcfc99f80920a9868f6ff"),
'2': ObjectId("61cdcfc99f80920a9868f700")
}
}
其他的插入方法
==普通的insert不推荐,已经被弃用==
think_db> db.user.insert({'username':'jobs','password':'twertw','gender':'male'})
DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
{
acknowledged: true,
insertedIds: { '0': ObjectId("61cdd0b19f80920a9868f701") }
}
还有一些update操作或者find-modify操作
Query
先准备演示数据
db.inventory.insertMany([
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
])
全量查询
think_db> db.inventory.find({})
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f703"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f704"),
item: 'paper',
qty: 100,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f705"),
item: 'planner',
qty: 75,
size: { h: 22.85, w: 30, uom: 'cm' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f706"),
item: 'postcard',
qty: 45,
size: { h: 10, w: 15.25, uom: 'cm' },
status: 'A'
}
]
等值查询
think_db> db.inventory.find({item: "journal"})
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
}
]
包含查询
think_db> db.inventory.find({status: {$in:['A','D']}})
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f703"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f704"),
item: 'paper',
qty: 100,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f705"),
item: 'planner',
qty: 75,
size: { h: 22.85, w: 30, uom: 'cm' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f706"),
item: 'postcard',
qty: 45,
size: { h: 10, w: 15.25, uom: 'cm' },
status: 'A'
}
]
范围查询
# 大于
think_db> db.inventory.find({qty: {$gt:40}})
[
{
_id: ObjectId("61cdd1d29f80920a9868f703"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f704"),
item: 'paper',
qty: 100,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f705"),
item: 'planner',
qty: 75,
size: { h: 22.85, w: 30, uom: 'cm' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f706"),
item: 'postcard',
qty: 45,
size: { h: 10, w: 15.25, uom: 'cm' },
status: 'A'
}
]
# 小于
think_db> db.inventory.find({qty: {$lt:75}})
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f703"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f706"),
item: 'postcard',
qty: 45,
size: { h: 10, w: 15.25, uom: 'cm' },
status: 'A'
}
]
# 大于+小于
think_db> db.inventory.find({qty: {$gt:45,$lt:75}})
[
{
_id: ObjectId("61cdd1d29f80920a9868f703"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'A'
}
]
# 不等于
think_db> db.inventory.find({qty: {$ne:45}})
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f703"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f704"),
item: 'paper',
qty: 100,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f705"),
item: 'planner',
qty: 75,
size: { h: 22.85, w: 30, uom: 'cm' },
status: 'D'
}
]
组合查询
逻辑与(and)
think_db> db.inventory.find({ status: "A", qty: { $lt: 30 } })
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
}
]
逻辑或(or)
think_db> db.inventory.find({ status: "A", qty: { $lt: 30 } })
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
}
]
think_db> db.inventory.find({$or: [{ status: "A" }, { qty: { $lt: 30 }}]})
[
{
_id: ObjectId("61cdd1d29f80920a9868f702"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f703"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'A'
},
{
_id: ObjectId("61cdd1d29f80920a9868f706"),
item: 'postcard',
qty: 45,
size: { h: 10, w: 15.25, uom: 'cm' },
status: 'A'
}
]
逻辑非(not)
think_db> db.inventory.find({status :{$not: {$eq:"A" }} })
[
{
_id: ObjectId("61cdd1d29f80920a9868f704"),
item: 'paper',
qty: 100,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'D'
},
{
_id: ObjectId("61cdd1d29f80920a9868f705"),
item: 'planner',
qty: 75,
size: { h: 22.85, w: 30, uom: 'cm' },
status: 'D'
}
]
update
准备数据
think_db> db.inventory.insertMany( [
{ item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
{ item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
{ item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );
单个文档更新
think_db> db.inventory.updateOne(
{ item: "paper" },
{
$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }
}
)
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
think_db>
多个文档更新
think_db> db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "in", status: "P" },
$currentDate: { lastModified: true }
}
)
{
acknowledged: true,
insertedId: null,
matchedCount: 3,
modifiedCount: 3,
upsertedCount: 0
}
单个文档替换
think_db> db.inventory.find( {})
[
{
_id: ObjectId("61cdd7cd9f80920a9868f707"),
item: 'canvas',
qty: 100,
size: { h: 28, w: 35.5, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f708"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'in' },
status: 'P',
lastModified: ISODate("2021-12-30T16:03:07.341Z")
},
{
_id: ObjectId("61cdd7cd9f80920a9868f709"),
item: 'mat',
qty: 85,
size: { h: 27.9, w: 35.5, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70a"),
item: 'mousepad',
qty: 25,
size: { h: 19, w: 22.85, uom: 'in' },
status: 'P',
lastModified: ISODate("2021-12-30T16:03:07.341Z")
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70b"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'P'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70c"),
item: 'paper',
qty: 100,
size: { h: 8.5, w: 11, uom: 'cm' },
status: 'P',
lastModified: ISODate("2021-12-30T16:02:07.578Z")
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70d"),
item: 'planner',
qty: 75,
size: { h: 22.85, w: 30, uom: 'cm' },
status: 'D'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70e"),
item: 'postcard',
qty: 45,
size: { h: 10, w: 15.25, uom: 'in' },
status: 'P',
lastModified: ISODate("2021-12-30T16:03:07.341Z")
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70f"),
item: 'sketchbook',
qty: 80,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f710"),
item: 'sketch pad',
qty: 95,
size: { h: 22.85, w: 30.5, uom: 'cm' },
status: 'A'
}
]
think_db> db.inventory.replaceOne(
... { item: "paper" },
... { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
... )
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
think_db> db.inventory.find( {})
[
{
_id: ObjectId("61cdd7cd9f80920a9868f707"),
item: 'canvas',
qty: 100,
size: { h: 28, w: 35.5, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f708"),
item: 'journal',
qty: 25,
size: { h: 14, w: 21, uom: 'in' },
status: 'P',
lastModified: ISODate("2021-12-30T16:03:07.341Z")
},
{
_id: ObjectId("61cdd7cd9f80920a9868f709"),
item: 'mat',
qty: 85,
size: { h: 27.9, w: 35.5, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70a"),
item: 'mousepad',
qty: 25,
size: { h: 19, w: 22.85, uom: 'in' },
status: 'P',
lastModified: ISODate("2021-12-30T16:03:07.341Z")
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70b"),
item: 'notebook',
qty: 50,
size: { h: 8.5, w: 11, uom: 'in' },
status: 'P'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70c"),
item: 'paper',
instock: [ { warehouse: 'A', qty: 60 }, { warehouse: 'B', qty: 40 } ]
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70d"),
item: 'planner',
qty: 75,
size: { h: 22.85, w: 30, uom: 'cm' },
status: 'D'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70e"),
item: 'postcard',
qty: 45,
size: { h: 10, w: 15.25, uom: 'in' },
status: 'P',
lastModified: ISODate("2021-12-30T16:03:07.341Z")
},
{
_id: ObjectId("61cdd7cd9f80920a9868f70f"),
item: 'sketchbook',
qty: 80,
size: { h: 14, w: 21, uom: 'cm' },
status: 'A'
},
{
_id: ObjectId("61cdd7cd9f80920a9868f710"),
item: 'sketch pad',
qty: 95,
size: { h: 22.85, w: 30.5, uom: 'cm' },
status: 'A'
}
]
think_db>
delete
单个文档删除
think_db> db.inventory.deleteOne( { status: "D" } )
{ acknowledged: true, deletedCount: 1 }
多个文档删除
think_db> db.inventory.deleteMany( { status: "A" } )
{ acknowledged: true, deletedCount: 4 }
全部清除
think_db> db.inventory.deleteMany( { } )
{ acknowledged: true, deletedCount: 5 }
think_db> db.inventory.find( { } )
think_db>