prosource

MongoDB 문서에서 필드를 완전히 삭제하려면 어떻게 해야 합니까?

probook 2023. 3. 29. 21:36
반응형

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번이나 받아들여지고 상향된 답변이 실제로는 틀렸다는 것을 깨달았습니다!

예, 연산자를 사용해야 하지만 이 설정을 해제하면 모음에 대한 문서에 존재하지 않는 단어 키가 제거됩니다.그러니까 기본적으로는 아무 것도 할 수 없어요.

그래서 당신은 Mongo에게 문서 태그를 보고 도트 표기법을 사용하여 단어를 찾아보라고 말해야 합니다.올바른 질문은 다음과 같습니다.

db.example.update(
  {},
  { $unset: {'tags.words':1}},
  false, true
)

완성하기 위해서, 다른 방법을 참조합니다.이것은 훨씬 더 나쁘지만, 이렇게 하면, 임의의 커스텀 코드로 필드를 변경할 수 있습니다(이 문서의 다른 필드에 근거하는 경우도 있습니다).

db.example.updateMany({},{"$unset":{"tags.words":1}})

여러 문서를 업데이트할 때도 사용할 수 있습니다.

db.collection.updateMany({}, {$unset: {"fieldName": ""}})

updateMany에는 각 문서에 대해 일치 조건이 필요합니다. {}을(를) 전달하고 있기 때문에 항상 해당됩니다.그리고 두 번째 인수는$unset연산자를 눌러 각 문서에서 필수 필드를 제거합니다.

MongoDB에서 필드를 삭제 또는 삭제하려면

  • 싱글 레코드의 경우

    db.getCollection('userData').update({}, {$unset: {pi: 1}})
    
  • 멀티레코드용

    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
    

시작점Mongo 4.2, 약간 다른 구문을 사용할 수도 있습니다.

// { name: "book", tags: { words: ["abc", "123"], lat: 33, long: 22 } }
db.collection.updateMany({}, [{ $unset: ["tags.words"] }])
// { name: "book", tags: { lat: 33, long: 22 } }

업데이트 메서드는 집약 파이프라인(집약 파이프라인의 사용을 나타내는 각 괄호 참조)을 받아들일 수 있으므로 여기서 사용되는 연산자는 집약 파이프라인('쿼리'와는 반대)이며 구문은 필드 배열을 사용합니다.

PyMongo(Python mongo)의 솔루션:

db.example.update({}, {'$unset': {'tags.words':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)에서되었습니다.

필드를 삭제하려면 다음 명령을 사용합니다(이 명령어는 컬렉션의 모든 문서에 적용됩니다).

db.getCollection('example').update({}, {$unset: {Words:1}}, {multi: true});

또한 하나의 명령어로 여러 필드를 삭제하려면 다음 절차를 수행합니다.

db.getCollection('example').update({}, {$unset: {Words:1 ,Sentences:1}}, {multi: true});

Mongo Engine을 사용하여 필드를 삭제하는 방법을 찾을 때 이 페이지를 계속 찾았기 때문에 Mongo Engine을 여기에 게시하는 것도 도움이 될 것 같습니다.

Example.objects.all().update(unset__tags__words=1)

mongoDB 쉘에서는 이 코드가 도움이 될 수 있습니다.

db.collection.update({}, {$unset: {fieldname: ""}} )

기본적으로 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})

그리고 몽고마퍼를 위해서

  • 문서:셧다운
  • 삭제할 필드: shutoff_type

Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )

Typegoose/Mongoose를 사용하는 경우 해당 모델에서 필드를 선언해야 합니다.그렇지 않으면 $unset이 자동으로 실패합니다.

데이터베이스를 리팩터링한 후 나는 이 사실을 알아차리지 못했다.중복 필드는 모델에 없고 $unset을 실행하고 있었지만 아무 일도 일어나지 않았습니다.

따라서 리팩터링을 수행할 경우 중복 필드를 모델에서 삭제하기 전에 $set 해제하십시오.

{ name: 'book', 태그: { words: ['slock'', 123', lat: 33, long: 22 }

응답:

db.tablename.remove'를 참조해 주세요.words':['s' ,123' ] }

"단어"가 존재하는지 확인한 후 문서에서 삭제

    db.users.update({"tags.words" :{$exists: true}},
                                           {$unset:{"tags.words":1}},false,true);

true는 일치하는 경우 여러 문서를 업데이트함을 나타냅니다.

3.4의 프로젝트를 사용하여 집약적으로 이 작업을 수행할 수도 있습니다.

{$project: {"syslog.단어": 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

반응형