MongoDB는 두 필드의 문자열을 세 번째 필드로 연결합니다.
두 문자열 필드의 값을 연결하여 세 번째 문자열 필드에 넣으려면 어떻게 해야 합니까?
시도해 본 적이 있습니다.
db.collection.update(
{ "_id": { $exists: true } },
{ $set: { column_2: { $add: ['$column_4', '$column_3'] } } },
false, true
)
하지만 효과가 없는 것처럼 보이고, 던져집니다.not ok for storage
.
저도 해봤어요.
db.collection.update(
{ "_id": { $exists : true } },
{ $set: { column_2: { $add: ['a', 'b'] } } },
false, true
)
하지만 이것조차도 같은 오류를 보여줍니다.not ok for storage
.
나는 내 애플리케이션이 아닌 몽고 서버에서만 연결하고 싶습니다.
집계 연산자 및 :
db.collection.aggregate([
{ $project: { newfield: { $concat: [ "$field1", " - ", "$field2" ] } } }
])
유감스럽게도 MongoDB는 현재 업데이트()를 수행할 때 필드의 기존 값을 참조할 수 없습니다.이 기능을 추가할 수 있는 기존 Jira 티켓이 있습니다. 자세한 내용은 SERVER-1765를 참조하십시오.
현재는 기존 값을 확인하기 위해 초기 쿼리를 수행하고 클라이언트에서 문자열 조작을 수행해야 합니다.제가 당신에게 더 나은 대답을 해줬으면 좋겠어요.
업데이트 시 집계 파이프라인을 지원하는 4.2에서 이와 같이 사용할 수 있습니다.
db.collection.update(
{"_id" :{"$exists":true}},
[{"$set":{"column_2":{"$concat":["$column_4","$column_3"]}}}]
)
@Jamby가 제안한 @rebe100x의 답변을 기반으로 합니다.
집계 파이프라인에서 $project, $concat 및 $out(또는 $merge)을 사용할 수 있습니다.https://docs.mongodb.org/v3.0/reference/operator/aggregation/project/ https://docs.mongodb.org/manual/reference/operator/aggregation/concat/ https://docs.mongodb.com/manual/reference/operator/aggregation/out/
예:
db.collection.aggregate(
[
{ $project: { newfield: { $concat: [ "$field1", " - ", "$field2" ] } } },
{ $out: "collection" }
]
)
MongoDB 4.2를 사용하여 .
MongoDB 4.2는 $merge pipeline stage를 추가하여 컬렉션 내에서 선택적으로 문서를 대체하고 $out은 전체 컬렉션을 대체합니다.또한 대상 문서를 대체하는 대신 병합할 수도 있습니다.
db.collection.aggregate(
[
{ $project: { newfield: { $concat: [ "$field1", " - ", "$field2" ] } } },
{ $merge: { into: "collection", on: "_id", whenMatched: "merge", whenNotMatched: "discard" }
]
)
$out은 임시 수집 및 이름 변경을 통해 수집 대체를 자동으로 수행하므로 $merge와 $out 사이에서 성능, 동시성 및 일관성 간의 균형을 고려해야 합니다.
https://docs.mongodb.com/manual/reference/operator/aggregation/merge/ https://docs.mongodb.com/manual/reference/operator/aggregation/merge/ #편집자주
**
나의 경우 이것은
$concat
저를 위해 일했습니다...
**
db.collection.update( { "_id" : {"$exists":true} },
[ {
"$set" : {
"column_2" : { "$concat" : ["$column_4","$column_3"] }
}
}
]
컬렉션 이름이 "myData"라고 가정하고 이와 같은 데이터가 있다고 가정합니다.
{
"_id":"xvradt5gtg",
"first_name":"nizam",
"last_name":"khan",
"address":"H-148, Near Hero Show Room, Shahjahanpur",
}
필드(first_name+last_name+address)를 연결하여 다음과 같이 "address" 필드에 저장합니다.
{
"_id":"xvradt5gtg",
"first_name":"nizam",
"last_name":"khan",
"address":"nizam khan,H-148, Near Hero Show Room, Shahjahanpur",
}
이제 쓰기 쿼리는
{
var x=db.myData.find({_id:"xvradt5gtg"});
x.forEach(function(d)
{
var first_name=d.first_name;
var last_name=d.last_name;
var _add=d.address;
var fullAddress=first_name+","+last_name+","+_add;
//you can print also
print(fullAddress);
//update
db.myData.update({_id:d._id},{$set:{address:fullAddress}});
})
}
다음과 같이 수행할 수도 있습니다.
db.collectionName.find({}).forEach(function(row) {
row.newField = row.field1 + "-" + row.field2
db.collectionName.save(row);
});
루프에 사용하여 각 찾기 및 업데이트
사용:
db.getCollection('users').find({ }).forEach( function(user) { user.full_name = user.first_name + " " + user.last_name; db.getCollection('users').save(user); });
또는 사용해 보십시오.
db.getCollection('users').find({ }).forEach( function(user) { db.getCollection('users').update( { _id: user._id }, { $set: { "full_name": user.first_name + " " + user.last_name } } ) });
언급URL : https://stackoverflow.com/questions/12820253/mongodb-concatenate-strings-from-two-fields-into-a-third-field
'programing' 카테고리의 다른 글
아무것도 하지 않는 파이썬 패스 문에 해당하는 자바스크립트가 있습니까? (0) | 2023.07.20 |
---|---|
ASCII로 변환했다가 Python에서 다시 변환 (0) | 2023.07.15 |
Gitbash 오류: 하위 프로세스를 포크할 수 없습니다.사용 가능한 터미널이 없습니다(-1). (0) | 2023.07.15 |
MariaDB JSON 제약 조건 추가 방법 (0) | 2023.07.15 |
푸시 알림 사용 권한 누락 (0) | 2023.07.15 |