4. mongoDB 셸 의 삭제 작업

41780 단어
4.1 insert 추가 작업
1. 주어진 데이터베이스 에 집합 을 추가 하고 기록 을 추가 합 니 다.
db.[documentName].insert({…})

데이터 삽입 시 주의사항:
  • 1.1 데이터 마다id 필드, 지정 하지 않 으 면 ObjectId 형식의 무 작위 값 을 id 로 사용 합 니 다.ObjectId 는 12 개의 바이트 로 구성 되 어 있 습 니 다. [시간 스탬프, 초 – 4 바이트 까지 정확 함] [기계 표지 – 3 바이트] [프로 세 스 id – 2 바이트] [랜 덤 카운터 – 3 바이트]
  • 1.2 _id 필드 유일, 중복 삽입 불가
  • 2. save 작업 과 insert 작업 의 차이 점:
  • 같은id 상황 에서 save 작업 은 현재 내용 을 덮어 쓰 고 저장 합 니 다. insert 작업 은 삽입 할 수 없습니다. 잘못된 메 인 키 반복
  • 4.2 remove 제거 작업
    1. 문서 의 데이터 삭제
    db.[documentName].remove({...})

    2. 목록 의 모든 데이터 삭제
    db.persons.remove()
    예: 집합 person 에서 name 이 uspcat 와 같은 기록 을 삭제 합 니 다.
    db.persons.remove({name:"uspcat"})
    > db.persons.find();
    { "_id" : ObjectId("57fdebdacf77bc67373cbb8e"), "name" : "extjs4.1" }
    { "_id" : ObjectId("57fdb688cf77bc67373cbb8d"), "age" : 1, "name" : "uspcat4" }
    > db.persons.remove({name:"extjs4.1"})
    > db.persons.find();
    { "_id" : ObjectId("57fdb688cf77bc67373cbb8d"), "age" : 1, "name" : "uspcat4" }

    작은 기술 은 데이터 양 이 매우 많은 집합 을 제거 하려 면 (db. persons. drop) 이 집합 을 직접 삭제 하고 색인 을 다시 만 드 는 방법 이 직접 reove 를 사용 하 는 것 보다 훨씬 효율 적 입 니 다.
    4.3 update 업데이트 작업 상세 설명
    문서 데이터 업데이트
    db.[documentName].update({查询条件},{更新内容},<upsert>,<multi>)

    (boolean) upset: 기본 값 은 false 입 니 다.true 로 설정 하면 일치 하 는 옵션 을 찾 지 못 하면 새 문서 내용 을 만 들 고 삽입 (boolean) multi: 기본적으로 일치 하 는 조건 에서 첫 번 째 일치 하 는 문서 만 업데이트 합 니 다. true 로 설정 하면 일치 하 는 모든 문 서 를 업데이트 합 니 다. 다른 필드 는 새 문 서 를 변경 하지 않 습 니 다. $set 이 없 는 경우: 업데이트 내용 을 조회 기 에 일치 하 는 문서 에 부여 합 니 다.홈 키 를 제외 하고 업데이트 내용 에 포함 되 지 않 은 필드 는 일률적으로 삭제 합 니 다.
    1 강력 한 문서 교체 식 업데이트 작업
    문법:
    db.[documentName].update({查询器},{修改器})

    예:
    > db.text.find()
    { "_id" : ObjectId("58286ed97bd74a5a3114faca"), "name" : 
    "yfc", "age" : 27 }
    
    将name为‘yfc’的人的age改为29
    > db.text.update({name:"yfc"},{age:29})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    发现字段中name不见了,只剩下age字段为29
    > db.text.find()
    { "_id" : ObjectId("58286ed97bd74a5a3114faca"), "age" : 29 }

    주: 강력 한 업 데 이 트 는 오래된 문 서 를 새 문서 로 대체 합 니 다. 보통 개발 에 서 는 이런 방법 을 사용 하지 않 습 니 다.
    2. 메 인 키 가 충돌 할 때 오류 가 발생 하고 업데이트 작업 을 중단 합 니 다.
    3 insertOrUpdate 작업 (하나 이상 의 매개 변수) 목적: 조회 기 에서 데 이 터 를 찾 으 면 업데이트 작업 을 수행 하고 찾 지 못 하면 삽입 작업 을 수행 합 니 다. db.[documentName].update({查询器},{修改器},true)
    > db.text.find()
    { "_id" : ObjectId("58286ed97bd74a5a3114faca"), "age" : 29 }
    { "_id" : 1, "name" : "name1", "age" : "age1" }
    { "_id" : 2, "name" : "name2", "age" : "age2" }
    { "_id" : 3, "age" : 40 }
    { "_id" : ObjectId("58287308c60186988c96cc68"), "age" : 41 }

    name = "name 5"문 서 를 업데이트 하려 고 하 는데 찾 을 수 없 으 면 삽입 작업 을 합 니 다.
    > db.text.update({name:"name5"},{"_id":5,age:50},true)
    WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 5 })
    > db.text.find()    发现新增了一行
    { "_id" : ObjectId("58286ed97bd74a5a3114faca"), "age" : 29 }
    { "_id" : 1, "name" : "name1", "age" : "age1" }
    { "_id" : 2, "name" : "name2", "age" : "age2" }
    { "_id" : 3, "age" : 40 }
    { "_id" : ObjectId("58287308c60186988c96cc68"), "age" : 41 }
    { "_id" : 5, "age" : 50 }

    4. 일괄 업데이트 작업 (파라미터 3, 4 추가) 목적: 조회 기 에서 여러 개의 일치 하 는 결 을 찾 아 업데이트 하 는 방법: db.[documentName].update({查询器},{修改器},false,true) 일반 업데이트 작업 을 사용 하면 수 요 를 완성 할 수 없습니다.
    > db.text.find()
    { "_id" : "1", "name" : "tom1", "age" : 21 }
    { "_id" : "2", "name" : "tom2", "age" : 21 }
    { "_id" : "3", "name" : "tom3", "age" : 33 }

    모든 나 이 를 21 로 바 꾸 고 싶 은 사람 은 22.
    > db.text.update({"age":21},{$set:{age:22}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    첫 번 째 일치 하 는 결 과 를 업 데 이 트 했 을 뿐 입 니 다.
    > db.text.find() 
    { "_id" : "1", "name" : "tom1", "age" : 22 }
    { "_id" : "2", "name" : "tom2", "age" : 21 }
    { "_id" : "3", "name" : "tom3", "age" : 33 }

    일괄 업데이트 작업 을 사용 하여 매개 변수 3: false (insertOrUpdate 작업 을 하지 않 음) 매개 변수 4: true (모든 일치 하 는 내용 을 일괄 수정 합 니 다)
    > db.text.update({"age":21},{$set:{age:22}},false,true)
    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

    일치 하 는 모든 결 과 를 업데이트 하 였 습 니 다.
    > db.text.find() 
    { "_id" : "1", "name" : "tom1", "age" : 22 }
    { "_id" : "2", "name" : "tom2", "age" : 22 }
    { "_id" : "3", "name" : "tom3", "age" : 33 }

    5. 수정 기 를 사용 하여 부분 업데이트 작업 을 수행 합 니 다.
    수정자 이름
    문법
    케이스$set
    { $set :{field:value}} {$set:{ gender: "male"} }
    키 쌍 을 지정 합 니 다. 이 키 가 존재 하면 수정 합 니 다. 존재 하지 않 으 면 update 를 추가 하기 전에
    > db.text.find() 
    { "_id" : "1", "name" : "tom1", "age" : 22 }
    { "_id" : "2", "name" : "tom2", "age" : 22 }
    { "_id" : "3", "name" : "tom3", "age" : 33 }

    tom 3 라 는 사람의 성별 gender 를 male: update 로 바 꾼 후 gender 키 가 하나 더 있 는 것 을 발견 하 였 습 니 다.
    > db.text.update({"name":"tom3"},{$set:{gender:"male"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.text.find()
    { "_id" : "1", "name" : "tom1", "age" : 22 }
    { "_id" : "2", "name" : "tom2", "age" : 22 }
    { "_id" : "3", "name" : "tom3", "age" : 33, "gender" : "male" }

    수정자 이름
    문법
    케이스$inc {$inc:{field:value}} {$inc:{"age":1}}
    작업 대상 은 반드시 숫자 형식 이 어야 하 며, 지정 한 키 에 대응 하 는 숫자 형식의 수 치 를 가감 할 수 있 습 니 다 (정 수 는 플러스, 음 수 는 감소).
    > db.user.find()
    { "_id" : 1, "name" : "user1", "age" : 21 }
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    
    给user1年龄加3
    > db.user.update({"name":"user1"},{$inc:{"age":3}}) 
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    发现user1的年龄增加了3岁
    > db.user.find() 
    { "_id" : 1, "name" : "user1", "age" : 24 }
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    

    수정자 이름
    문법
    케이스$unset {$unset:{field:1}} {$unset:{}}
    지정 한 키 제거:
    age 키 제거
    > db.user.update({"name":"user1"},{$unset:{"age":1}}) 
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    发现user1的age键不见了
    > db.user.find() 
    { "_id" : 1, "name" : "user1" }
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }

    수정자 이름
    문법
    케이스$push {$push:{field:value}} {$push:{books:"JS"}}
    (이 수정 기 는 배열 에 만 유효 합 니 다) 1. 지정 한 키 가 배열 이 라면 새로운 수 치 를 추가 합 니 다. 2. 지정 한 키 가 존재 하지 않 으 면 배열 형식의 키 쌍 을 만 듭 니 다.
    > db.user.update({"name":"user1"},{$push:{"age":1}})
    > db.user.update({"name":"user1"},{$push:{"age":2}})
    > db.user.update({"name":"user1"},{$push:{"age":1}})
    
    
     看到增加了数组类型的age键值对
    > db.user.find() 
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 1, 2, 1 ] }

    수정자 이름
    문법
    케이스$pushAll {$pushAll:{field:array}}} {$pushAll:{books:["JS","java"]}}
    배열 에 데 이 터 를 대량으로 추가 합 니 다. 존재 하지 않 으 면 만 듭 니 다. (이 수정 기 는 배열 에 만 유효 합 니 다)
    > db.user.update({"name":"user1"},{$pushAll:{"books":["java","python","scala"]}})
    > db.user.find()
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 1, 2, 1, 3, 4, 5, 4 ], "books" : [ "java", "python", "scala" ] }

    수정자 이름
    문법
    케이스$addToSet {$addToSet:{field:value}} {$pushAll:{books:"JS"}}
    배열 에 데 이 터 를 추가 하고 존재 하 는 데이터 에 가입 하지 않 으 며 존재 하지 않 으 면 가입 합 니 다 (이 수정 기 는 배열 에 만 유효 합 니 다)
    原始数据:
    > db.user.find()
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 1, 2, 1, 3, 4, 5, 4 ], "books" : [ "java", "python", "scala" ] }
    
    
    > db.user.update({"name":"user1"},{$addToSet:{"books":"java"}})
    没有写成功,因为java已经存在于数组中了
    
    > db.user.update({"name":"user1"},{$addToSet:{"books":"javaWeb"}})
    
    写成功了,java因为存在所以不写入,javaWeb因为不存在所以写入了:
    > db.user.find()
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 1, 2, 1, 3, 4, 5, 4 ], "books" : [ "java", "python", "scala", "javaWeb" ] }

    수정자 이름
    문법
    케이스$pop {$pop:{field:value}}} {$pop:{books:1}}
    지정 한 배열 에서 첫/끝 값 을 삭제 합 니 다. -1: 첫 번 째 값 삭제 1: 끝 값 삭제 (이 수정 기 는 배열 에 만 유효 합 니 다)
    原始数据:
    > db.user.find()
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 1, 2, 1, 3, 4, 5, 4 ], "books" : [ "java", "python", "scala", "javaWeb" ] }
    
    删除 user1 的 books 数组中第一个元素
    > db.user.update({"name":"user1"},{$pop:{"books":-1}}) 
    
    发现 book 数组中的 java 不见了
    > db.user.find()  
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 1, 2, 1, 3, 4, 5, 4 ], "books" : [ "python", "scala", "javaWeb" ] }

    수정자 이름
    문법
    케이스$pull {$pull:{field:value}} {$pull:{"age":1}}
    배열 에서 지정 한 수 치 를 삭제 합 니 다 (이 수정 기 는 배열 에 만 유효 합 니 다)
    原始数据:
    > db.user.find()
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 1, 2, 1, 3, 4 ], "books" : [ "python", "scala", "javaWeb" ], "gender" : "male" }
    
    删除age数组中所有的1
    > db.user.update({"name":"user1"},{$pull:{"age":1}},false,true) 
    
    发现age数组中已经没有了1
    > db.user.find() 
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 2, 3, 4 ], "books" : [ "python", "scala", "javaWeb" ], "gender" : "male" }

    수정자 이름
    문법
    케이스$pullAll {$pullAll:{field:value}} {$pullAll:{books:"javaWeb"}}
    여러 개의 지정 한 수 치 를 한꺼번에 삭제 합 니 다. (이 수정 기 는 배열 에 만 유효 합 니 다)
    { "_id" : 1, "name" : "user1", "age" : [ 2, 3, 4 ], "books" : [ "python", "scala", "javaWeb" ], "gender" : "male" }
    
    批量删除 user1 的 books属性中的"python","javaWeb"
    > db.user.update({"name":"user1"},{$pullAll:{"books":["python","javaWeb"]}})
    
    "python","javaWeb"已经被删掉了
    > db.user.find()
    { "_id" : 2, "name" : "user2", "age" : 22 }
    { "_id" : 3, "name" : "user3", "age" : 23 }
    { "_id" : 1, "name" : "user1", "age" : [ 2, 3, 4 ], "books" : [ "scala" ], "gender" : "male"}

    기타 유형
    1. 배열 위치 지정 기
    만약 배열 에 여러 개의 값 이 있다 면 우 리 는 그 중의 일부분 만 조작 하려 면 위치 추적 기 를 사용 해 야 한다.
    예: 문서
    {"_id":"4",
    "desc":
    [{"name":"js","type":"avi"},
    {"name":"hadoop","type":"rmvb"},
    {"name":"spark","type":"mp4"}]}

    저 희 는 desc 배열 의 type 이 "avi"와 같은 문서 에 같은 작성 자 author 를 추가 하려 고 합 니 다. "llj"입 니 다.
    주: 수정 기 는 가장 밖 에 두 고 뒤에 배 울 조회 기 는 안쪽 에 두 는 것 임 을 명심 하 세 요.
    2. $add$each 를 결합 하여 대량 배열 업데이트 완료
    문서: {"id": 1, "books": ["js", "scala"]} 의 내용 을 수정 하여 books 배열 에 "js", "python"두 값 을 삽입 하여 중복 검 사 를 요구 합 니 다.
    > db.user.update({"_id":1},{$addToSet:{books:{$each:["js","python"]}}})

    업데이트 가 실 행 된 후 "python"만 업데이트 되 었 고 "js"는 삽입 되 지 않 았 습 니 다.
    > db.user.find()  
    …
    { "_id" : 1, "books" : [ "js", "scala", "python" ] }

    3. 분배 와 조회 효율 이 존재 합 니 다.
    document 이 생 성 되 었 을 때 DB 는 메모리 와 예비 메모 리 를 할당 합 니 다. 수정 작업 이 예비 메모 리 를 초과 하지 않 을 때 속도 가 매우 빠 릅 니 다. 반대로 예비 메모 리 를 초과 하면 시간 이 소 모 됩 니 다.
    4. runCommand 함수 와 findAndModify 함수
    runCommand 는 mongoDB 의 특수 함 수 를 실행 할 수 있 습 니 다 findAndModify 는 특수 함수 중 하나 입 니 다. update 나 remove 후의 문서 형식 을 되 돌려 주 는 역할 을 합 니 다.
    runCommand({"findAndModify":"文档名称",
                query:{查询器},
                sort{排序},
                new:true,
                update:{更新器},
                remove:true
    }).value

    예: 문서 업데이트 { "_id" : 3, "name" : "user3", "age" : 23 }, 그 중 age 를 88 로 변경
    > ps = db.runCommand({
    findAndModify:"user",
    query:{_id:3},
    update:{$set:{age:88}},
    new:true
    })
    > ps.value
    { "_id" : 3, "name" : "user3", "age" : 88 }

    좋은 웹페이지 즐겨찾기