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


334

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

기존 문서의 필드를 업데이트하는 방법을 알고 있지만 컬렉션의 모든 문서에 새 필드를 추가하는 방법은 알고 있지 않습니다. mongo쉘 에서 어떻게 할 수 있습니까?

답변:


598

기존 컬렉션 업데이트 필드와 동일하게 $set지정된 필드가없는 경우 새 필드를 추가합니다.

이 예제를 확인하십시오.

> 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
)

편집하다:

위의 예에서 마지막 두 필드 false, trueupsertmulti플래그를 지정합니다 .

Upsert : true로 설정하면 쿼리 기준과 일치하는 문서가 없을 때 새 문서를 만듭니다.

다중 : true로 설정하면 쿼리 기준에 맞는 여러 문서를 업데이트합니다. false로 설정하면 하나의 문서를 업데이트합니다.

versions이전 몽고를위한 것 2.2입니다. 최신 버전의 경우 쿼리가 약간 변경되었습니다.

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

7
가치없이 창조하는 것이 가능
합니까

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

1
빈 배열을 만들려면 어떻게해야합니까?
Prashant Pokhriyal

3
@PrashantPokhriyal db.your_collection.update ({}, {$ set : { "new_field": []}}, {upsert : false, multi : true})
Máxima Alekz

3
동적으로 할당 된 값으로 새 필드를 만들려면 어떻게합니까? 예를 들어, 필드 new_field의 문자열 길이와 동일한 정수이어야 test합니다.
qed

3

명확히하기 위해 구문은 MongoDB 버전 4.0.x에서 다음과 같습니다.

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

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

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

0

피 몬고 3.9+

update()지금은 사용되지 않습니다 당신이 사용한다 replace_one(), update_one()또는 update_many()대신.

내 경우에는 사용 update_many()하고 내 문제를 해결했습니다.

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

문서에서

update_many(filter, update, upsert=False, array_filters=None, bypass_document_validation=False, collation=None, session=None)


filter: A query that matches the documents to update.

update: The modifications to apply.

upsert (optional): If True, perform an insert if no documents match the filter.

bypass_document_validation (optional): If True, allows the write to opt-out of document level validation. Default is False.

collation (optional): An instance of Collation. This option is only supported on MongoDB 3.4 and above.

array_filters (optional): A list of filters specifying which array elements an update should apply. Requires MongoDB 3.6+.

session (optional): a ClientSession.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.