Перемещение документа из одной коллекции в другую перезаписывает документ - PullRequest
0 голосов
/ 20 февраля 2019

При выполнении первой операции путем сопоставления с идентификатором [1602271] создается новая коллекция и сохраняется один документ (нижеуказанный документ).

{
  "_id": "1602271",
  "date": "2019-02-11T06:25:13.425Z",
  "currentStatus": "scheduled",
  "statusHistory": [
    {
      "status": "onboarded",
      "date": "2018-11-02T10:07:11.167Z"
    },
    {
      "status": "preference_ready",
      "date": "2018-11-02T10:08:56.359Z"
    },
    {
      "status": "scheduled",
      "date": "2018-11-02T10:26:38.721Z"
    }
  ]
}

При втором идентификаторе операции [1602131] это невместо этого создается новый документ, который перезаписывается старым (выше JSON).

{
  "_id": "1602131",
  "date": "2019-01-22T07:08:58.253Z",
  "currentStatus": "scheduled",
  "statusHistory": [
    {
      "status": "onboarded",
      "date": "2018-11-02T06:07:28.765Z"
    },
    {
      "status": "preference_ready",
      "date": "2018-11-02T06:11:30.777Z"
    },
    {
      "status": "scheduled",
      "date": "2018-11-29T05:48:57.871Z"
    }
  ]
}

Пожалуйста, используйте нижеприведенный код:

  public static final String STATUS_COLLECTION_NAME = "TeacherStatus";

  public static final String ARCHIVE_STATUS_COLLECTION_NAME = 
                "ArchiveTeacherStatus";

    Aggregation aggregation = Aggregation.newAggregation(match(where("_id").is(teacherId)),
                    out(ARCHIVE_STATUS_COLLECTION_NAME));
            mongoOperations.aggregate(aggregation, STATUS_COLLECTION_NAME, TeacherStatus.class);

1 Ответ

0 голосов
/ 20 февраля 2019

Работает как задумано.https://docs.mongodb.com/manual/reference/operator/aggregation/out/

Если коллекция, заданная операцией $out, уже существует, то после завершения агрегирования этап $out атомарно заменяет существующую коллекцию новой коллекцией результатов.

Это будет возможно в mongodb 4.2, где $out stage примет дополнительный параметр mode, который может принимать значения «replaceCollection» (что происходит сейчас), «replaceDocuments», «insertDocuments»(что вы хотите).


Перечитав код, почему вы используете конвейер агрегации с $out для копирования одного документа?Это охота на воробьев с пушкой.

Вы можете сделать это более надежно через приложение.Прочитайте документ, затем сохраните его в другой коллекции.

...