source

MongoDB 컬렉션의 모든 문서에 새 필드 추가

manysource 2023. 3. 11. 09:13

MongoDB 컬렉션의 모든 문서에 새 필드 추가

기존 컬렉션의 모든 문서에 새 필드를 추가하려면 어떻게 해야 합니까?

기존 문서의 필드를 업데이트하는 방법은 알고 있지만 모음의 모든 문서에 새 필드를 추가하는 방법은 알고 있지 않습니다.이걸 어떻게 하면mongo껍데기?

기존 컬렉션 필드 업데이트와 마찬가지로 지정된 필드가 없는 경우 새 필드를 추가합니다.

다음의 예를 참조해 주세요.

> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }

편집:

모든 컬렉션에 new_field를 추가하려면 빈 선택기를 사용하고 다중 플래그를 true(마지막 매개 변수)로 설정하여 모든 문서를 업데이트해야 합니다.

db.your_collection.update(
  {},
  { $set: {"new_field": 1} },
  false,
  true
)

편집:

위의 예에서는 마지막 2개의 필드false, true를 지정합니다.upsert그리고.multi플래그를 설정합니다.

Upsert: true로 설정하면 쿼리 기준에 일치하는 문서가 없을 때 새 문서를 작성합니다.

다중: 참으로 설정하면 쿼리 기준을 충족하는 여러 문서를 업데이트합니다.false로 설정하면 하나의 문서를 업데이트합니다.

몽고 선물입니다.versions에 앞서2.2최신 버전에서는 쿼리가 약간 변경되었습니다.

db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true}) 

MongoDB 버전 3.2부터 update Many()를 사용할 수 있습니다.

> db.yourCollection.updateMany({}, {$set:{"someField": "someValue"}})

MongoDB 버전 4.0.x 의 구문은 다음과 같습니다.

db.collection.update({},{$set: {"new_field*":1}},false,true)

다음은 문서 모음에 게시된 필드를 추가하고 필드 값을 true로 설정하는 작업 예입니다.

db.articles.update({},{$set: {"published":true}},false,true)
db.collection.updateMany({}, {$set: {"fieldName": ""}})

updateMany각 문서의 일치 조건이 필요합니다.{}그것은 항상 진실이다.그리고 두 번째 인수는$set연산자를 사용하여 각 문서에 필수 필드를 추가합니다.

피몽고 3.9+

update() 이제 더 이상 사용되지 않습니다.replace_one(),update_one(), 또는update_many()대신.

제 경우, 사용했더니 문제가 해결되었습니다.

db.your_collection.update_many({}, {"$set": {"new_field": "value"}}, upsert=False, array_filters=None)

만약 당신이 mongoose를 사용하고 있다면, mongoose 연결 후에 이것을 시도해 보십시오.

async ()=> await Mongoose.model("collectionName").updateMany({}, {$set: {newField: value}})

위의 답변은 이 시나리오에 포함되지 않습니다.비슷한 쿼리를 찾고 있었지만 추가하기를 원합니다.fields조건에 따라 적은 수의 문서만 사용할 수 있습니다.

그래서 우리는 다음의 첫 번째 변수를 사용할 수 있다.updateMany몇 개의 문서에서만 필드를 업데이트합니다.

예:null 필드를 추가하고 싶다.isDeprecated?userType이 고용주이고 국가 "AAA"를 가진 모든 사용자에게 적용됩니다.

db.users.updateMany({"userType": "Employer", "country": "AAA"}, {"$set": { "isDeprecated?": true }})  

이 답변은 수집을 찾아 업데이트해야 하는 시나리오에서도 도움이 됩니다.이 작업은 앞서 말한 것처럼 단일 쿼리에서 수행할 수 있습니다.

언급URL : https://stackoverflow.com/questions/7714216/add-new-field-to-every-document-in-a-mongodb-collection