Повторяющийся _id в new_results

У меня есть коллекция метеоров, и я хочу разрешить пользователю редактировать сразу несколько элементов и нажимать кнопку «Сохранить», чтобы обновить их все.

Это моя коллекция:

EmpresasUsuarias = new Mongo.Collection("empresasUsuarias");

И я делаю это на клиенте, чтобы он был в $ scope:

$scope.empresasUsuarias = $meteor.collection(EmpresasUsuarias, false);

Дело в том, что когда пользователь добавляет какие-то элементы и нажимает «Сохранить», я собираю (только) новые элементы в массив и отправляю на сервер с помощью метода метеора. На сервере метод вставляет элементы в коллекцию (mongo). Все нормально, пока поток не вернется к клиенту. Там коллекция получает "обратно" все эти новые записи снова, и они дублируются, и ошибка появляется в (клиентской) консоли:

Duplicate _id in new_results

Я думаю, что происходит то, что механизм подписки / публикации активируется, когда элементы вставляются и отправляются обратно клиенту; но они там уже существуют, и Meteor считает, что они дублированы (т.е. Meteor не синхронизирует элементы, а дублирует их и завершает сообщение об ошибке).

Я должен сказать, что я назначаю _id для каждой новой записи в клиенте, поэтому, когда они достигают сервера, у них уже есть _id.

Что я здесь делаю не так? Почему Meteor считает, что эти предметы разные, и говорит, что они дублируются?

Заранее большое спасибо за помощь и до свидания ...


person Manuel Rivera    schedule 16.06.2015    source источник
comment
Я думаю, что лучше не назначать _id, а оставить их автоматически сгенерированными, чтобы предотвратить такие ошибки   -  person oshai    schedule 17.06.2015
comment
Я не назначаю _id коллекции в клиенте сейчас ... те же результаты. Я делаю простое: 1) подписываюсь на очень маленькую коллекцию; 2) $ scope.MyCollection = $ meteor.collection (MyCollection, false); 3) $ scope.MyCollection.push ({name: 'my name'}) (несколько раз); 4) Сохраните с помощью метода метеора (на сервере): MyCollection.insert (item) (несколько раз, потому что мне нужно вставить много элементов). 5) Список ($ scope) показывает повторяющиеся элементы (клиент). 6) Ошибка: повторяющийся _id в новых результатах. 7) Что я делаю не так? Большое спасибо ...   -  person Manuel Rivera    schedule 17.06.2015
comment
Вы можете опубликовать это в github, чтобы мы могли воспроизвести?   -  person oshai    schedule 17.06.2015
comment
Привет @oshai, похоже, работает; пожалуйста, смотрите ниже; Благодарность ...   -  person Manuel Rivera    schedule 17.06.2015


Ответы (1)


Что ж, вот что я сделал, чтобы решить свою проблему. Я просто остановил свою коллекцию перед сохранением и пересчитал ее после сохранения.

  1. Сохранить изменения пользователя в $scope в массиве
  2. Остановлен сбор: $scope.MyCollection.stop()
  3. $scope.MyCollection.length = 0;
  4. Вызов метода сервера (Meteor) для сохранения правок (передача массива с правками)
  5. Подпишитесь на коллекцию метеоров (снова)
  6. $scope.MyCollection = $meteor.collection(MyCollection, false)

Я продолжаю получать свои _ids (для новых документов) в клиенте. Не знаю, правильно ли я это делаю, просто знаю, что, видимо, работает.

person Manuel Rivera    schedule 17.06.2015