MongoDB
CRUD 작업
수색…
통사론
- 삽입 ( 문서 또는 문서 배열 )
- insertOne ( '문서', {writeConcern : '문서'})
- insertMany ({[문서 1, 문서 2, ...]}, {writeConcern : 문서, 정렬 : 부울})
- 찾기 ( 쿼리 , 투영 )
- findOne ( 쿼리 , 프로젝션 )
- 업데이트 ( 쿼리 , 업데이트 )
- updateOne ( 쿼리 , 업데이트 , {upsert : 부울, writeConcern : 문서})
- updateMany ( 쿼리 , 업데이트 , {upsert : 부울, writeConcern : 문서})
- replaceOne ( 쿼리 , 대체 , {upsert : 부울, writeConcern : 문서})
- remove ( query , justOne )
- findAndModify ( 쿼리 , 정렬 , 업데이트 , 옵션 [선택 사항] )
비고
문서 업데이트 및 삭제는 신중하게 수행되어야합니다. 작업이 여러 문서에 영향을 줄 수 있기 때문입니다.
몹시 떠들어 대다
db.people.insert({name: 'Tom', age: 28});
또는
db.people.save({name: 'Tom', age: 28});
save
과의 차이점은 전달 된 문서에 _id
필드가있는 경우 해당 _id
가있는 문서가 새 것으로 추가되는 대신 업데이트된다는 것입니다.
MongoDB 3.2.x에서 콜렉션에 문서를 삽입하는 두 가지 새로운 메소드 -
하나의 레코드 만 삽입하려면 insertOne
을 사용하십시오.
db.people.insertOne({name: 'Tom', age: 28});
insertMany
를 사용하여 여러 레코드를 삽입하십시오.
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
insert
은 공식 언어 드라이버 버전 3.0 이후로 비추천으로 강조 표시됩니다. 쉘 메소드가 실제로 메소드를 구현할 때 다른 드라이버보다 뒤떨어져 있다는 점이 완전히 다른 점입니다. 다른 모든 CRUD 메소드에도 똑같이 적용됩니다.
최신 정보
전체 개체 업데이트 :
db.people.update({name: 'Tom'}, {age: 29, name: 'Tom'})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace only first matching document.
db.people.updateMany({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace all matching documents.
또는 문서의 단일 필드를 업데이트하십시오. 이 경우 age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
세 번째 매개 변수를 추가하여 여러 문서를 동시에 업데이트 할 수도 있습니다. 이 쿼리는 이름이 Tom
모든 문서를 업데이트합니다.
db.people.update({name: 'Tom'}, {$set: {age: 29}}, {multi: true})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{$set:{age: 30}) //Will update only first matching document.
db.people.updateMany({name: 'Tom'},{$set:{age: 30}}) //Will update all matching documents.
새 필드가 업데이트 될 경우 해당 필드가 문서에 추가됩니다.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
문서를 교체해야하는 경우,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
사용할 수 있습니다.
참고 : 개체를 식별하는 데 사용하는 필드는 업데이트 된 문서에 저장됩니다. 업데이트 섹션에서 정의되지 않은 필드는 문서에서 제거됩니다.
지우다
쿼리 매개 변수와 일치하는 모든 문서를 삭제합니다.
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
아니면 하나만
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
MongoDB의 remove()
메소드. 인수없이 또는 빈 인수없이이 명령을 실행하면 콜렉션에서 모든 문서가 제거됩니다.
db.people.remove();
또는
db.people.remove({});
독서
name
이 'Tom'
people
컬렉션의 모든 문서를 쿼리합니다.
db.people.find({name: 'Tom'})
아니면 그냥 첫 번째 :
db.people.findOne({name: 'Tom'})
필드 선택 매개 변수를 전달하여 반환 할 필드를 지정할 수도 있습니다. 다음은 _id
필드를 제외하고 age
필드 만 포함합니다.
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
참고 : 기본적으로 _id
필드는 요청하지 않은 경우에도 반환됩니다. _id: 0
(또는 _id: false
)을 지정하여 _id
다시 얻지 않으려면 앞의 예제를 따르고 _id: 0
을 지정하여 제외시킬 _id
를 요청할 수 있습니다. 주소 개체와 같은 하위 레코드를 찾으려면 country , 도시 등
db.people.find({'address.country': 'US'})
필요한 경우 필드 지정 (& I)
db.people.find({'address.country': 'US'}, {'name': true, 'address.city': true})Remember that the result has a `.pretty()` method that pretty-prints resulting JSON:
db.people.find().pretty()
더 많은 업데이트 연산자
문서를 업데이트 할 때 $set
외의 다른 연산자를 사용할 수 있습니다. $push
연산자를 사용하면 값을 배열로 푸시 할 수 있습니다.이 경우 nicknames
배열에 새 닉네임을 추가합니다.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
$pull
연산자는 $push
와 반대이며 배열에서 특정 항목을 가져올 수 있습니다.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
$pop
연산자를 사용하면 배열의 첫 번째 또는 마지막 값을 제거 할 수 있습니다. Tom의 문서에 ['Marie', 'Bob', 'Kevin', 'Alex']
값을 갖는 형제라는 속성이 있다고 가정 해 보겠습니다.
db.people.update({name: 'Tom'}, {$pop: {siblings: -1}})
// This will remove the first value from the siblings array, which is 'Marie' in this case.
db.people.update({name: 'Tom'}, {$pop: {siblings: 1}})
// This will remove the last value from the siblings array, which is 'Alex' in this case.
여러 문서를 업데이트하는 동안 "multi"매개 변수
컬렉션의 여러 문서를 업데이트하려면 multi 옵션을 true로 설정하십시오.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
멀티는 선택 사항입니다. true로 설정하면 조회 기준을 충족시키는 여러 문서를 갱신합니다. false로 설정하면 하나의. 서를 갱신합니다. 기본값은 false입니다.
"제목": "MongoDB 개요"} { "_id": ObjectId (59835487adf45ec6), "title": "NoSQL 개요"} { "_id": dbid = ObjectId (59835487adf45ec7), "title": "튜토리얼 포인트 개요"}
db.mycol.update ({ 'title': 'MongoDB 개요'}, {$ set : { 'title': '새로운 MongoDB Tutorial'}}, {multi : true})
삽입 된 문서의 업데이트.
다음 스키마의 경우 :
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Tom의 표시를 55가 50 인 위치로 업데이트합니다 (위치 연산자 $ 사용).
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
다음 스키마의 경우 :
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Tom의 영어 표시를 85로 업데이트하십시오.
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
위의 예를 설명하면 :
{name : "Tom", "marks.subject": "English"}를 사용하면 marks 배열에있는 객체의 위치를 얻을 수 있습니다. 여기서 subject는 영어입니다. "marks. $. marks"에서, $는 marks 배열의 해당 위치에서 업데이트하는 데 사용됩니다.
배열의 값 업데이트
위치 $ 연산자는 배열의 요소 위치를 명시 적으로 지정하지 않고 업데이트 할 배열 요소를 식별합니다.
다음과 같은 서류를 소장 한 학생들을 생각해보십시오 :
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
첫 번째 문서의 그레이드 배열에서 80에서 82로 업데이트하려면 배열에서 요소의 위치를 모르는 경우 위치 $ 연산자를 사용하십시오.
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)