Как перезаписать идентификатор объекта в Mongo db при создании приложения в Sails

Я новичок в Sails и Mongo Db. В настоящее время я пытаюсь реализовать функцию CRUD с помощью Sails, где я хочу сохранить данные пользователя в Mongo db. В модели у меня есть следующие атрибуты.

"id":{
  type:'Integer',
  min:100,
  autoincrement:true
},
attributes: {
    name:{
     type:'String',
     required:true,
     unique:true
 },
    email_id:{
       type:'EMAIL',
       required:false,
       unique:false
},
   age:{
     type:'Integer',
     required:false,
     unique:false
   }
} 

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

"name": "abc"
"age": 30
"email_id": "[email protected]"
"id": "5587bb76ce83508409db1e57"

Здесь указанный идентификатор является идентификатором объекта. Может ли кто-нибудь сказать мне, как переопределить идентификатор объекта с целым числом, начинающимся со 100, и автоматически увеличивается с каждым новым значением.


person shubhamagiwal92    schedule 22.06.2015    source источник


Ответы (1)


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

Однако иногда вам очень хочется приукрасить бесконечное значение ObjectID (т. е. чтобы оно отображалось в URL-адресе после кодирования). Затем следует рассмотреть возможность использования подходящей стратегии атомарного приращения.

Переопределение примера _id:

db.testSOF.insert({_id:"myUniqueValue", a:1, b:1})

Создание автоинкрементной последовательности:

  • Использовать коллекцию счетчиков. В основном это отдельная коллекция, в которой отслеживается последний номер последовательности. Лично я считаю более удобным хранить функцию findAndModify в коллекции system.js, хотя это не хватает возможностей управления версиями.
  • Оптимистический цикл

Изменить:

Я нашел проблему, в которой владелец паруса-монго сказал:

MongoDb не имеет атрибута автоматического увеличения, потому что он не поддерживает его без какого-либо ручного увеличения последовательности в отдельной коллекции или документе. В настоящее время мы не делаем этого в адаптере, но это может быть добавлено в будущем или если кто-то захочет отправить PR. Мы делаем что-то подобное для Sailes-Disk и Sails-Redis, чтобы получить поддержку полей autoIncremeting.

Он упоминает первую технику, которую я добавил в этот ответ: Использование коллекции счетчиков. В том же выпуске lewins показывает обходной путь.

person TechWisdom    schedule 22.06.2015
comment
привет, TechWisdom, я тоже пытался использовать _id, и это дало мне ту же ошибку. Поскольку я использую Sails для создания приложения, нам нужно указать атрибуты в файле модели. Когда я получил спецификацию для _id, я присвоил его тип целому числу и автоматически увеличил его. Даже при указании требований в модели я получаю идентификатор объекта. Я не понимаю, почему _id не получает определенные настройки, которые я установил в модели? - person shubhamagiwal92; 22.06.2015
comment
Привет, @shubhamagiwal, поможет ли вам установить для autoPK значение false в настройках модели? - person TechWisdom; 22.06.2015
comment
Я сделал, как показано выше, и получил тот же объект. Можете ли вы предложить что-нибудь еще - person shubhamagiwal92; 22.06.2015
comment
@shubhamagiwal Похоже на нереализованную функцию. Посмотрите на мою новую редакцию. - person TechWisdom; 22.06.2015