mongoDB добавление данных в коллекции без поля _id - PullRequest
0 голосов
/ 26 июля 2011

это продолжение моего предыдущего вопроса о настройке отдельных данных для наборов реплик, я обнаружил, что вы можете указать коллекцию для каждой реплики для чтения и что вы можете фактически смоделировать oplog.rs.

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

Однако единственной большой проблемой на моем пути сейчас является поле _id autoпоколение при добавлении данных в коллекцию.

Можно ли мне обойти это поколение _id и просто добавить информацию в коллекцию?Если нет, то считается ли поле _id, которое уже отображается внутри добавляемого документа, документом _id?

Я ценю ваш вклад, Гонсалу

PS: еще раз, это частьпроект java / jsp, и если кто-либо в этой области может помочь с функциями для этого, пожалуйста, сделайте это!

1 Ответ

3 голосов
/ 28 июля 2011

Nevermind, нашел ответ на это на официальных форумах, для дальнейшего использования я оставлю окончательный ответ, полученный оттуда.


ПРИМЕЧАНИЕ: Этот ответ предположительно работает в соответствии с разработчиками mongoDB, однако я не смог заставить его работать должным образом, использовать по своему усмотрению, и если что-то не так, хорошо, присоединяйтесь к веселому отчету об ошибках!

Чтобы иметь возможность добавлять документы в коллекцию без поля "_id", сначала нам нужно создать коллекцию Capped, эту коллекцию Capped (предположительно, согласно документации, для этих коллекций также необходимо установить максимальный размер). ) получает документы, добавленные без поля «_id» по умолчанию, однако в некоторых случаях они могут добавить поле «_id» в любом случае, в этом случае мы указываем «autoIndexId» как false, это (предположительно) перезаписывает все значения по умолчанию и устанавливает коллекция, чтобы не устанавливать поле "_id" в качестве индекса, что позволит нам позже удалить его.

Итак, подведем итог, шаг 1:
мы создали ограниченную коллекцию:

db.createCollection("cappedcoll", {capped:true, size:100000});

step2:
протестируйте коллекцию, чтобы проверить, действительно ли она генерирует поле "_id".

если не генерирует. почему, тебе повезло! Поздравляю! если это генерирует. Шаг 3:
мы создаем ограниченную коллекцию с полем autoIndexId, равным false:

db.createCollection("cappedcoll", {capped:true, size:100000, autoIndexId:false});
step4:
мы добавляем элемент в коллекцию и затем удаляем поле "_id" через обновление:

db.cappedcoll.insert({"names": {"First": "Gonza", "Last": "Vieira"}}); db.cappedcoll.update({"names.First": "Gonza"},{$unset: {"_id":1}});

если вы дойдете до этой части, то она либо сработает, либо вы получите неприятное сообщение об ошибке "cannot modify "_id"", которое не должно отображаться, поскольку мы установили "_id", чтобы он не был индексом коллекции ...

И это также означает, что вы точно на той же стадии, что и я.
Удачи, и я надеюсь, что они или исправят это в ближайшее время, или кто-то здесь дополняет этот пост и исправляет все, что я сказал неправильно.

...