插入
InsertOne(), 原子的,插入一个documentInsertMany(), 非原子的,插入document数组
InsertOne( {字段1:值,字段2:值} )
> db.crew.insertOne({name: "tony", skills: ["coding"], address:{city:"Beijing", country: "China"} })
{
"acknowledged" : true,
//id是12字节,4字节时间戳,5字节随即值,3字节计数器
"insertedId" : ObjectId("619720ead7079d0dd875a74e")
}
InsertMany( [ {字段1:值,字段2:值}, {字段1:值,字段2:值} ] )
- 虽然返回的id可能是连续的,也可能不是连续的,因为这个操作不是一个事务,可能会被其他request中断。
查询
findOne()find()- Mongo DB有一个wiredtiger的算法,它认为写入总是有效的。所以,如果执行查询的下一秒,有新的写入:
- 传统关系数据库: 是查询前获得一个view,后续写入不会反应在查询结果上
- Mongo DB: 查询将停止,除非管理readConcerned。它会执行写入,会在写入完成或失败时,重试查询
更新
updateMany()updateMany(1,2,3)
{查询条件}{$set: {字段:新值,字段:新值}, $currentDate:{lastModified:true}},lastModified字段必须为当前日期,如果字段不存在,则创建lastModified{upsert:true},这个为options对象。upsert为真,表示如果没找到匹配项,则创建document
> db.crew.updateMany({skills: "management"}, {$set: {"address.city":"Shanghai", "address.country": "China"}, $currentDate: {lastModified:true}},{upsert:true})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
> db.crew.find({skills: "management"}).pretty()
{
"_id" : ObjectId("619380fe204711818273f99c"),
"name" : "Andrei Luca",
"skills" : [
"technical",
"management"
],
"address" : {
"city" : "Shanghai",
"country" : "China"
},
"lastModified" : ISODate("2021-11-19T06:24:17.729Z")
}
{
"_id" : ObjectId("619380fe204711818273f99d"),
"name" : "Anna Smith",
"skills" : [
"technical",
"management"
],
"address" : {
"city" : "Shanghai",
"country" : "China"
},
"lastModified" : ISODate("2021-11-19T06:24:17.729Z")
}
除了UpdateMany()之外,还有
UpdateOne()ReplaceOne()
删除
deleteMany({查询条件})
> db.crew.deleteMany({skills: "coding"})
{ "acknowledged" : true, "deletedCount" : 2 }