[MONGODB] MongoDB의 문서에서 하위 문자열 대체하는 방법
MONGODBMongoDB의 문서에서 하위 문자열 대체하는 방법
나는 형식의 컬렉션 MongoDB의 문서를 많이 가지고 :
{
....
"URL":"www.abc.com/helloWorldt/..."
.....
}
내가 얻을 인 helloWorld와 helloWorldt를 교체하려면 :
{
....
"URL":"www.abc.com/helloWorld/..."
.....
}
어떻게 내 컬렉션에있는 모든 문서 이것을 달성 할 수 있습니까?
해결법
-
==============================
1.
db.media.find({mediaContainer:"ContainerS3"}).forEach(function(e,i) { e.url=e.url.replace("//a.n.com","//b.n.com"); db.media.save(e); });
-
==============================
2.몽고 4.2 시작, db.collection.update ()는 마지막으로 다른 필드를 기준으로 필드의 업데이트를 허용 집계 파이프 라인을 받아 들일 수 있습니다 :
몽고 4.2 시작, db.collection.update ()는 마지막으로 다른 필드를 기준으로 필드의 업데이트를 허용 집계 파이프 라인을 받아 들일 수 있습니다 :
// { URL: "www.abc.com/helloWorldt/..." } // { URL: "www.abc.com/HelloWo/..." } db.collection.update( { URL: { $regex: "/helloWorldt/" } }, [{ $set: { URL: { $concat: [ { $arrayElemAt: [ { $split: [ "$URL", "/helloWorldt/" ] }, 0 ] }, "/helloWorld/", { $arrayElemAt: [ { $split: [ "$URL", "/helloWorldt/" ] }, 1 ] } ] }} }], { multi: true } ) // { URL: "www.abc.com/helloWorld/..." } // { URL: "www.abc.com/HelloWo/..." }
이것은 조금 아직 연산자를 대체 할 적절한 문자열 $ 없기 때문에 장황.
-
==============================
3.현재, 당신은 그것을 업데이트 할 필드의 값을 사용할 수 없습니다. 그래서 당신은 문서를 통해 반복해야하고 기능을 사용하여 각 문서를 업데이트 할 수 있습니다. 당신이 그렇게 할 수있는 방법에 대한 예제가있다 : MongoDB를 : 같은 문서에서 데이터를 사용하여 업데이트 문서
현재, 당신은 그것을 업데이트 할 필드의 값을 사용할 수 없습니다. 그래서 당신은 문서를 통해 반복해야하고 기능을 사용하여 각 문서를 업데이트 할 수 있습니다. 당신이 그렇게 할 수있는 방법에 대한 예제가있다 : MongoDB를 : 같은 문서에서 데이터를 사용하여 업데이트 문서
-
==============================
4.nodejs. NPM에서 MongoDB의 패키지를 사용하여
nodejs. NPM에서 MongoDB의 패키지를 사용하여
db.collection('ABC').find({url: /helloWorldt/}).toArray((err, docs) => { docs.forEach(doc => { let URL = doc.URL.replace('helloWorldt', 'helloWorld'); db.collection('ABC').updateOne({_id: doc._id}, {URL}); }); });
-
==============================
5.문서에 사용되는 문자열의 모든 발생을 교체하려면 :
문서에 사용되는 문자열의 모든 발생을 교체하려면 :
db.media.find({mediaContainer:"ContainerS3"}).forEach(function(e,i) { var find = "//a.n.com"; var re = new RegExp(find, 'g'); e.url=e.url.replace(re,"//b.n.com"); db.media.save(e); });
-
==============================
6.(Naveed의 대답 @) 선택한 답변에 대한 나의 의견의 서식이 스크램블있어 한 - 그래서 대답으로이 추가. 모든 신용 Naveed로 이동합니다.
(Naveed의 대답 @) 선택한 답변에 대한 나의 의견의 서식이 스크램블있어 한 - 그래서 대답으로이 추가. 모든 신용 Naveed로 이동합니다.
그냥 끝내. 내 경우는 있었다 - 나는 배열하는 필드가 - 나는 여분의 루프를 추가했다 있도록.
내 질문은 :
db.getCollection("profile").find({"photos": {$ne: "" }}).forEach(function(e,i) { e.photos.forEach(function(url, j) { url = url.replace("http://a.com", "https://dev.a.com"); e.photos[j] = url; }); db.getCollection("profile").save(e); eval(printjson(e)); })
-
==============================
7.지금 당신은 그것을 할 수 있습니다!
지금 당신은 그것을 할 수 있습니다!
우리는 실시간으로 데이터를 조작 할 몽고 스크립트를 사용할 수 있습니다. 그것은 나를 위해 작동합니다!
내 주소 데이터를 수정하기 위해이 스크립트를 사용합니다.
현재 주소의 예 : "12 번 5 번가,".
나는 마지막 중복 쉼표, 예상되는 새 주소 ","12 번 5 번가 "를 제거합니다.
var cursor = db.myCollection.find().limit(100); while (cursor.hasNext()) { var currentDocument = cursor.next(); var address = currentDocument['address']; var lastPosition = address.length - 1; var lastChar = address.charAt(lastPosition); if (lastChar == ",") { var newAddress = address.slice(0, lastPosition); currentDocument['address'] = newAddress; db.localbizs.update({_id: currentDocument._id}, currentDocument); } }
희망이 도움이!
-
==============================
8.그냥 당신이 대답을 여기에서 예를 사용하고 있고 대체 스크립트를 실행할 때 "0 기존 레코드를 업데이트"받을 경우 경우, 클라이언트가 저장 / 쓰기 변경을 허용하는 주 MongoDB를 노드에 연결되어 있는지 확인합니다.
그냥 당신이 대답을 여기에서 예를 사용하고 있고 대체 스크립트를 실행할 때 "0 기존 레코드를 업데이트"받을 경우 경우, 클라이언트가 저장 / 쓰기 변경을 허용하는 주 MongoDB를 노드에 연결되어 있는지 확인합니다.
-
==============================
9.때로는 MongoDB의 컬렉션이 중첩 된 배열을 조금 복잡한 얻을 수 / 등 그들 주변의 빌드 루프 상대적으로 어려울 것입니다 경우 객체. 나의 해결책은 좀 원시하지만 수집의 복잡성에 관계없이 대부분의 시나리오에서 작동합니다.
때로는 MongoDB의 컬렉션이 중첩 된 배열을 조금 복잡한 얻을 수 / 등 그들 주변의 빌드 루프 상대적으로 어려울 것입니다 경우 객체. 나의 해결책은 좀 원시하지만 수집의 복잡성에 관계없이 대부분의 시나리오에서 작동합니다.
.bson에 mongodump를 사용하여 1. 내보내 모음
mongodump --db=<db_name> --collection=<products> --out=data/
.json 형식으로 2. 변환 .bson bsondump를 사용하여
bsondump --outFile products.json data/<db_name>/products.bson
(리눅스 터미널) 나오지도 또는 다른 도구로 .json 파일에서 문자열을 교체합니다
sed -i 's/oldstring/newstring/g' products.json
4. 가져 오기는 가져 오기 전에 컬렉션을 제거 할 --drop 태그 mongoimport으로 .json 모음을 백업
mongoimport --db=<db_name> --drop --collection products <products.json
예
mongodump --uri "mongodb://mongoadmin:mystrongpassword@10.148.0.7:27017,10.148.0.8:27017,10.148.0.9:27017/my-dbs?replicaSet=rs0&authSource=admin" --collection=products --out=data/
from https://stackoverflow.com/questions/12589792/how-to-replace-substring-in-mongodb-document by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 필드 순서 및 문서 위치 변경 갱신 후 (0) | 2019.12.04 |
---|---|
[MONGODB] 유성의 평균 집계 쿼리 (0) | 2019.12.04 |
[MONGODB] 몽구스를 사용하여 MongoDB의 컬렉션에 대한 만료 시간 설정 (0) | 2019.12.04 |
[MONGODB] MongoDB의에서 문자열 필드 값의 길이 (0) | 2019.12.04 |
[MONGODB] 어떻게 유성 문서 작업의 메시지 카운트 예는 무엇입니까? (0) | 2019.12.04 |