MongoDB - Двойная запись поступает в коллекцию - PullRequest
0 голосов
/ 06 февраля 2012

В настоящее время мы используем sharding mongodb на производственном сервере и имеем одну коллекцию, называемую «отслеживание заказов», и создали ключ shardkey с помощью следующей команды.

db.runCommand( { shardcollection : "OT.ordertracking", key : {OrderId : 1} } )

В эту коллекцию «_id» также вставляем тот же orderid, которыймы обновляем в поле OrderId.Но в этой коллекции произошла двойная запись.Но мы не знаем, как это возможно?Потому что _id является уникальным ключом, как это происходит?

Детали схемы сбора и примеры дубликатов записей для ваших ссылок.

_id,OrderId,Name,City,State,Country
12,12,sara,38,12,201
12,12,sara,34,12,201
18,12,sara,32,12,201
18,12,sara,28,12,201

Как устранить эту проблему и поделитесь своими данными.

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Поскольку _id является уникальным ключом, как это происходит?

Mongo не поддерживает уникальные индексы через шарды. Он может обеспечить уникальность только для самого ключа шарда (или ключей, которые включают ключ шарда).

Если вы не осколите _id, Mongo больше не сможет гарантировать его уникальность (потому что нет глобального индекса). Поэтому вы должны позаботиться об этом самостоятельно в коде приложения.

0 голосов
/ 07 февраля 2012

В изолированной коллекции вы не можете изменить значение ключа шарда в документе.Это неизменное.В противном случае MongoDB пришлось бы проделать большую работу, чтобы переместить ваш документ в новое нужное место.

Правильный способ изменить значение ключа шарда - это вставить новый документ с новым значением и удалить старый документ.

...