2015-06-16 5 views
0

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

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

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

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

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

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

Duplicate _id in new_results 

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

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

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

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

+0

Я думаю, что лучше не назначать _id, но оставить их автогенерированными, чтобы предотвратить такие ошибки. – oshai

+0

Я не назначаю _id для коллекции в клиенте сейчас ... такие же результаты. Я делаю что-то просто: 1) подписаться на очень маленькую коллекцию; 2) $ scope.MyCollection = $ meteor.collection (MyCollection, false); 3) $ scope.MyCollection.push ({name: 'мое имя "}) (несколько раз); 4) Сохранить с помощью метода meteor (на сервере): MyCollection.insert (item) (несколько раз, потому что у меня есть много элементов для вставки). 5) Список ($ scope) показывает повторяющиеся элементы (клиент). 6) Ошибка: Дублируйте _id в новых результатах. 7) Что я делаю неправильно? Большое спасибо ... –

+0

можете ли вы опубликовать его в github, чтобы мы могли воспроизвести? – oshai

ответ

1

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

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

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