4. mongoDB 셸 의 삭제 작업
1. 주어진 데이터베이스 에 집합 을 추가 하고 기록 을 추가 합 니 다.
db.[documentName].insert({…})
데이터 삽입 시 주의사항:
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 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.