2015-02-25 3 views
2

Ok Я исследовал много о попытке использовать автоматическое приращение Int в _id поле вместо string, теперь Im использования mrt:mongo-counter для автоматического приращения и peerlibrary:directcollection для доступа непосредственно к MongoDB. У меня есть место Метеор название коллекции какИспользование коллекции _id Метеора как целое

Venues = new Mongo.Collection("venues"); 

И я попробовал все другой способ использования ИНТ в _id поле и, как я знаю Метеор Dont позволить, кроме string или ObjectId в качестве идентификаторов, является ли способ для для этого нужно работать?

это мой код:

function makeNewId(){ 
    return incrementCounter("venueId",1); 
} 

var venueDirect = new DirectCollection(Venues, makeNewId); 

var _venueId = venueDirect.insert(
    { 
     userId : _userId, 
     created : new Date(), 
     name : "", 
     description : "", 
     cover : "", 
     image : "", 
     location : "", 
     suspended : false, 
     visible : false 
    } 
); 

Я также попытался с:

var _venueId = Venue.insert(
     { 
      _id : incrementCounter("venueId",1), 
      userId : _userId, 
      created : new Date(), 
      name : "", 
      description : "", 
      cover : "", 
      image : "", 
      location : "", 
      suspended : false, 
      visible : false 
     } 
    ); 

без результата.

Как я могу найти обходной путь для работы с int как _id в метеора

+0

Какова цель? –

+2

Да, почему бы просто не добавить новое поле, 'incrementingId' или что-то, что имеет свойства, которые вы хотите, и сохранить существующий' _id'? – stubailo

+0

@stubailo Похоже, это требование на mongodb по какой-то причине -сайт. Но я не могу найти способ сделать это. – ncubica

ответ

0

Что я закончил делать это хранение id номер в формате string, так что теперь вы будете иметь последовательность, как "1""2" ... и т.д. не лучшее решение, но я обнаружил, что большинство разработчиков в моем проекте были счастливы -sigh-

0

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

В любом случае, наконец rawCollection пришел ко мне на помощь.

Venues = new Mongo.Collection("venues"); 
VenuesRawCollection = Venues.rawCollection(); 

VenuesRawCollection.insert(
    { 
     _id : Venues.findOne({}, {sort: {_id: -1}})._id + 1, 
     userId : _userId, 
     created : new Date(), 
     name : "", 
     description : "", 
     cover : "", 
     image : "", 
     location : "", 
     suspended : false, 
     visible : false 
    } 
); 

Примечание: Справедливое предупреждение. Используя rawCollection, вы потеряете любую магию autoValue из SimpleSchema/collections2.

+0

вы можете столкнуться с условием гонки с этим подходом к созданию двух или трех пользователей. это не атомная вставка? – ncubica

+0

да. но вы можете изменить его, чтобы использовать значение, полученное из счетчика mongo, и использовать его значение как идентификатор. что также разрешит состояние гонки. https://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/ –

Смежные вопросы