Отличительные результаты в запросе db.collection.find () - PullRequest
2 голосов
/ 25 сентября 2011

У меня есть запрос к коллекции db.users.find (), которая возвращает результаты дублирования. Например, user._id "1" может повторяться несколько раз.

Есть ли способ вернуть отличные результаты?

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Если вы хотите использовать только все разные user._id, используйте db.users.distinct ("_ id")

если вы хотите, чтобы целые записи имели различный _id, вам нужно продумать стратегию выбора между 2 записями с одним и тем же user._id Вы можете использовать уменьшение группы или карты, но вам нужно подумать о том, что я хочу, когда есть 2 пользователя с одинаковым _id.

Кстати, _id обычно генерируются mongodb и должны быть уникальными. Если у вас 2 одинаковых идентификатора, либо у вас очень высокая скорость вставки в вашу коллекцию, либо вы генерируете _id самостоятельно. Есть ли какая-то особая причина, по которой вы генерируете не уникальный _id?

0 голосов
/ 25 сентября 2011

Один find никогда не должен возвращать повторяющиеся результаты, так как в Mongo нет такой вещи, как объединение, поэтому нет обстоятельств, при которых один документ будет возвращен дважды при запросе.То, что вы описываете, звучит так, как будто это никогда не должно происходить, но трудно сказать без подробностей.

Однако, одна возможность состоит в том, что find возвращает открытый курсор, так что, если, например, выперебирая большое количество документов и обновляя их по мере необходимости, вы можете получить тот же документ снова позже.Причина этого заключается в том, что ваше обновление может увеличить размер документа, чтобы он больше не помещался в имеющемся пространстве, поэтому его необходимо перераспределить в конце коллекции, где позднее он снова будет подхваченкурсор.Если это то, что вы делаете, вам, вероятно, следует подумать о том, чтобы сделать обновление по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...