{
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
)
완성을 위해 다른 방법을 언급 할 것입니다. 이 방법은 훨씬 나쁘지만이 방법을 사용하면이 문서의 다른 필드를 기반으로하는 사용자 정의 코드로 필드를 변경할 수 있습니다.
답변
db.example.updateMany({},{"$unset":{"tags.words":1}})
이를 사용하여 여러 문서를 업데이트 할 수도 있습니다.
답변
MongoDB에서 필드를 제거하거나 삭제하려면
-
단일 레코드
db.getCollection('userData').update({}, {$unset: {pi: 1}})
-
멀티 레코드
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
답변
이와 비슷한 작업을 시도했지만 대신 포함 된 문서에서 열을 제거했습니다. 해결책을 찾는 데 시간이 걸렸으며 이것이 처음 접한 게시물이므로 다른 사람이 똑같이하려고하면 여기에 게시 할 것이라고 생각했습니다.
따라서 데이터가 다음과 같다고 가정 해 보겠습니다.
{
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”에 반대 )이며 구문은 필드 배열을 사용함을 의미 합니다.