MongoDB 문서에서 필드를 완전히 제거하는 방법은 무엇입니까?
{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
이것이 문서라고 가정하십시오. words
이 컬렉션의 모든 문서에서 " "를 완전히 제거하려면 어떻게합니까 ? 모든 문서에 " words
" 가없는 것을 원합니다 .
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
다음을 시도하십시오. 컬렉션이 '예제'인 경우
db.example.update({}, {$unset: {words:1}}, false, true);
이것을 참조하십시오 :
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
업데이트 :
위의 링크는 더 이상 '$ unset'을 다루지 않습니다. {multi: true}
컬렉션의 모든 문서에서이 필드를 제거 하려면 추가 해야합니다. 그렇지 않으면 일치하는 첫 번째 문서에서만 제거됩니다. 업데이트 된 설명서는 다음을 참조하십시오.
https://docs.mongodb.com/manual/reference/operator/update/unset/
예:
db.example.update({}, {$unset: {words:1}} , {multi: true});
처음에는 질문에 현상금이있는 이유를 얻지 못했습니다 (질문에 좋은 대답이 있고 추가 할 것이 없다고 생각했습니다). 그러나 15 번 수락하고 공표 한 답변이 실제로 잘못되었음을 알았습니다!
예, $unset
operator 를 사용해야 하지만이 설정을 해제하면 컬렉션의 문서에 존재하지 않는 단어 키가 제거됩니다. 따라서 기본적으로 아무것도하지 않습니다.
따라서 Mongo에게 문서 태그를 찾은 다음 점 표기법을 사용하는 단어를 보도록 지시해야합니다 . 올바른 쿼리입니다.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
완료를 위해 다른 방법을 언급 할 것입니다. 이 방법은 훨씬 나쁘지만이 방법을 사용하면이 문서의 다른 필드를 기반으로하는 사용자 정의 코드로 필드를 변경할 수 있습니다.
MongoDB에서 필드를 제거하거나 삭제하려면
단일 레코드
db.getCollection('userData').update({}, {$unset: {pi: 1}})
멀티 레코드
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
db.example.updateMany({},{"$unset":{"tags.words":1}})
이를 사용하여 여러 문서를 업데이트 할 수도 있습니다.
이와 비슷한 작업을 시도했지만 대신 포함 된 문서에서 열을 제거했습니다. 해결책을 찾는 데 시간이 걸렸으며 이것이 처음으로 접한 게시물이므로 다른 사람이 똑같이하려고하면 여기에 게시 할 것이라고 생각했습니다.
따라서 데이터가 다음과 같이 보입니다.
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
words
포함 된 문서에서 열을 제거하려면 다음 과 같이하십시오.
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
또는 updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
는 $unset
값이 존재하는 경우에만 편집합니다하지만 (경우 확인 실 거예요 안전한 탐색을하지 않을 것이다 tags
가 포함 된 문서에 필요한 존재 있도록 먼저 존재).
버전 3.6에 도입 된 모든 위치 연산자 ( $[]
)를 사용합니다.
기본적으로 update () 메소드는 단일 문서를 업데이트합니다. 쿼리 기준과 일치하는 모든 문서를 업데이트하려면 다중 매개 변수를 설정하십시오.
버전 3.6으로 변경되었습니다. 구문 :
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
예 :
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
귀하의 예에서 :
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
시작 Mongo 4.2
하여 약간 다른 구문을 사용할 수도 있습니다.
// { name: "book", tags: { words: ["abc", "123"], lat: 33, long: 22 } }
db.collection.update({}, [{ $unset: ["tags.words"] }], { many: true })
// { name: "book", tags: { lat: 33, long: 22 } }
업데이트 또한 통합 파이프 라인을 받아 들일 수 방법은 (집계 파이프 라인의 사용을 의미 제곱 브래킷을 참고).
이는 $unset
사용되는 연산자가 집계 쿼리 ( "query"에 반대 )이며 구문은 필드 배열을 사용함을 의미 합니다.
몽고 매퍼에게는
- 문서 : 차단
- 제거 할 필드 : shutoff_type
Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )
{이름 : 'book', 태그 : {단어 : [ 'abc', '123'], 위도 : 33, 길이 : 22}}
답변 :
db.tablename.remove ({ 'tags.words': [ 'abc', '123']})
"단어"가 있는지 확인한 후 문서에서 제거
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true는 일치하는 경우 여러 문서를 업데이트 함을 나타냅니다.
3.4에서 프로젝트를 사용하여 집계 에서이 작업을 수행 할 수도 있습니다
{$ project : { "tags.words": 0}}
패키지를 참조하고 다양한 "키"를 제거하려면 다음을 시도하십시오
db['name1.name2.name3.Properties'].remove([
{
"key" : "name_key1"
},
{
"key" : "name_key2"
},
{
"key" : "name_key3"
}
)]
참고 URL : https://stackoverflow.com/questions/6851933/how-to-remove-a-field-completely-from-a-mongodb-document
'Programing' 카테고리의 다른 글
Eclipse 기본 작업 공간을 변경하는 방법? (0) | 2020.03.28 |
---|---|
mockito를 사용하여 특정 유형의 목록을 캡처하는 방법 (0) | 2020.03.28 |
VSCode : 편집기를 세로로 분할하는 방법 (0) | 2020.03.28 |
Composer로 단일 라이브러리를 업데이트하는 방법은 무엇입니까? (0) | 2020.03.28 |
데이터 프레임에서 열을 어떻게 재정렬합니까? (0) | 2020.03.28 |