2014-01-13 2 views
1

Я работаю с node.js и mongoose. Я создаю REST API, чтобы выставить свою модель User:Как назначить значение id в mongodb?

var userSchema = new Schema({ 
_id: {type:Number}, 
username: {type:String}, 
age: {type:Number}, 
genre:{type: Number,ref:'Genre'}, 
country: {type: Number,ref:'Country'} 
}); 

Как вы можете видеть, что я решил включить поле _id, так что если я хочу, чтобы создать новый пользователь, мне нужно, чтобы сгенерировать значение это поле, например:

exports.createUser = function(req,res){ 
var user = new User({ 
    _id: //Generate and assing value here 
     //Other properties are retrieved from the request object 
}); 
}; 

Как я могу «сгенерировать» или присвоить значение для моего поля _id правильно? Как с этим справляется манго?

+2

Я бы предложил вам указать MongoDB значение для вашего поля _id. Если вам нужно дополнительное поле идентификатора, вы можете указать другое поле (например, ключ) и использовать любой алгоритм, который вы хотите для него (последовательное поле или GUID). –

ответ

5

Я никогда не использовал мангуст. но если _id не включен в запрос вставки, драйвер mongodb будет генерировать _id s для вас как объект ObjectId. и если вы хотите использовать свой собственный _id s, вам решать, как его тип и длина, а также вам должны гарантировать его уникальность среди коллекции, потому что любая попытка вставить документ с дублированным _id не удастся.

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

+0

Итак, если мой метод POST не получит _id param из входящего запроса Mongo создаст его для меня. Отлично, это избавляет меня от моих сомнений. Благодарю. – user1659653

+0

@ user1659653 рад, что это помогло, удачи :) –

0

mongoDB требует, чтобы _id, если поставлялся, был уникальным. Если _id не входит в комплект, он создается водителем на стороне клиента (то есть НЕ mongod сервера!) В качестве 12-байтового BSON ObjectId со следующей структурой:

4-byte value representing the seconds since the Unix epoch, 
3-byte machine identifier, 
2-byte process id, and 
3-byte counter, starting with a random value. 

Дополнительная информация доступна здесь: http://docs.mongodb.org/manual/reference/object-id

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