복붙노트

[MONGODB] MongoDB의 필드 순서 및 문서 위치 변경 갱신 후

MONGODB

MongoDB의 필드 순서 및 문서 위치 변경 갱신 후

나는 MongoDB를 배우고 내가 눈치가 나는 같은 것을했다 그렇다면, 문서 순서의 끝으로 밀려 업데이트되는 분야에 대한 업데이 트를 할 때마다 :

db.collection.save({field1: value1, field2: value2, ..., field 10: value10});
db.collection.update({field1: value1}, {$set: {field2: new_value}});

당신이 할 다음 경우 :

db.collection.find();

이 표시됩니다 :

{ "field1":"value1", ..., "field10":"value10", "field2":"new_value"}

당신은 업데이트 된 필드가 문서의 끝으로 밀려된다 필드 순서가 어떻게 변경되는지 확인할 수 있습니다. 또한, 문서 자체가 collectoin의 단부에 가압되고있다. 나는 그것이 "스키마없는"DB 있다고 알고는 큰 문제가되지 않을 수 있지만, 그것은 단지 "꽤"를 :) 보이지 않는다. 순서를 변경하지 않고 현재 위치에서 업데이 트를 할 수있는 방법이 있나요?

해결법

  1. ==============================

    1.MongoDB를 특정 패딩 요인을 기반으로 새 문서에 대한 공간을 할당합니다. 당신의 업데이트가 크기 이상으로 문서의 크기를 증가하는 경우 원래 문서가 컬렉션의 끝으로 이동합니다 할당. 동일한 개념은 문서의 필드에 적용됩니다.

    MongoDB를 특정 패딩 요인을 기반으로 새 문서에 대한 공간을 할당합니다. 당신의 업데이트가 크기 이상으로 문서의 크기를 증가하는 경우 원래 문서가 컬렉션의 끝으로 이동합니다 할당. 동일한 개념은 문서의 필드에 적용됩니다.

  2. ==============================

    2.참고로, MongoDB를 2.6 업데이트는 다음과 같은 예외를 제외하고, 필드 순서를 유지한다 :

    참고로, MongoDB를 2.6 업데이트는 다음과 같은 예외를 제외하고, 필드 순서를 유지한다 :

  3. ==============================

    3.JSON의 원칙을 기반으로하여 MongoDB에서 두 문서의 구조 및 수집 구조. JSON은 (문서 및 인덱스 / 문서 컬렉션 특정의 fieldName / fieldValue의)에서 키 / 값 쌍의 집합이다. 이러한 관점에서 당신이 전혀 순서에 의존 할 수있는 것 같지 않습니다.

    JSON의 원칙을 기반으로하여 MongoDB에서 두 문서의 구조 및 수집 구조. JSON은 (문서 및 인덱스 / 문서 컬렉션 특정의 fieldName / fieldValue의)에서 키 / 값 쌍의 집합이다. 이러한 관점에서 당신이 전혀 순서에 의존 할 수있는 것 같지 않습니다.

  4. ==============================

    4.필드 크기가 변경되면 문서의 경우, 필드에 새 문서가 필드 이름으로 분류되어 기록합니다. 이 문제는 다음과 같은 문장으로 볼 수있다

    필드 크기가 변경되면 문서의 경우, 필드에 새 문서가 필드 이름으로 분류되어 기록합니다. 이 문제는 다음과 같은 문장으로 볼 수있다

    사례 1 : 필드의 크기 변화 없음, 필드 순서에 변화가 너무

    > db.testcol.find()
    > db.testcol.save({a:1,c:3,b:2})
    > db.testcol.find()
    { "_id" : ObjectId("4d5efc3bec5855af36834f5a"), "a" : 1, "c" : 3, "b" : 2 }
    > db.testcol.update({a:1},{$set:{c:22}})
    > db.testcol.find()
    { "_id" : ObjectId("4d5efc3bec5855af36834f5a"), "a" : 1, "c" : 22, "b" : 2 }
    

    사례 2 : 필드 크기 변경과 필드 reodered된다

    > db.testcol.find()
    > db.testcol.save({a:1,c:"foo",b:2,d:4})
    > db.testcol.find()
    { "_id" : ObjectId("4d5efdceec5855af36834f5e"), "a" : 1, "c" : "foo", "b" : 2, "d" : 4 }
    > db.testcol.update({a:1},{$set:{c:"foobar"}})
    > db.testcol.find()
    { "_id" : ObjectId("4d5efdceec5855af36834f5e"), "a" : 1, "b" : 2, "c" : "foobar", "d" : 4 }
    

    당신이 다시 정렬 필드를 원하지 않는 이유는 특별한 이유가 있나요? OS X에 상기 사용 하였다 1.8.0_rc0

  5. ==============================

    5.나는 당신을 위해 기본적으로 문서 키를 정렬 사용자 정의 mongorc.js을 만드는 프로젝트를 만들었습니다. 그것은 몽고 해커라고

    나는 당신을 위해 기본적으로 문서 키를 정렬 사용자 정의 mongorc.js을 만드는 프로젝트를 만들었습니다. 그것은 몽고 해커라고

  6. ==============================

    6.라만, 우리는 일종의 권리] 사전 수 없다, 그러나 우리는 일종의 문서의 순서를 제기 할 수 있도록 우리는 사전 시각화를 정렬 할 수 있습니다,하지만 난 그것을 주문한 볼 수 있습니다.

    라만, 우리는 일종의 권리] 사전 수 없다, 그러나 우리는 일종의 문서의 순서를 제기 할 수 있도록 우리는 사전 시각화를 정렬 할 수 있습니다,하지만 난 그것을 주문한 볼 수 있습니다.

    펄 to_json 유무 옵션 정식에서 예를 들어,

    print to_json( $data, { utf8 => 1, pretty => 1, convert_blessed => 1, canonical => 1 } );
    

    (표준 옵션)가 출력 JSON은 자신의 키를 정렬하여 객체. 이는 비교적 높은 오버 헤드를 추가한다. (물론, 우리는 ... 더 정렬 작업을 할)

  7. ==============================

    7.내가 원하는 순서대로 필드를하기 위해, 나는 다른 컬렉션에 대한 올바른 순서로 속성을 가진 모든 문서를 삽입. 그럼 기존의 컬렉션을 제거하고 원래의 이름으로 새로운 컬렉션을 이름. 먼저 분명히 백업 데이터.

    내가 원하는 순서대로 필드를하기 위해, 나는 다른 컬렉션에 대한 올바른 순서로 속성을 가진 모든 문서를 삽입. 그럼 기존의 컬렉션을 제거하고 원래의 이름으로 새로운 컬렉션을 이름. 먼저 분명히 백업 데이터.

  8. from https://stackoverflow.com/questions/5046835/mongodb-field-order-and-document-position-change-after-update by cc-by-sa and MIT license