如何在mongodb中分配id值?

时间:2014-01-13 16:01:45

标签: javascript node.js mongodb express mongoose

我正在使用node.js和mongoose。我正在创建一个REST API来公开我的用户模型:

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字段赋值? mongo如何处理这个问题?

2 个答案:

答案 0 :(得分:5)

我从未使用猫鼬。但如果_id未包含在插入查询中,则mongodb驱动程序将为ObjectId对象生成_id。如果您希望使用自己的_id,则由您来决定其类型和长度,并且必须保证其在集合中的唯一性,因为任何插入的尝试具有重复_id的文档将失败。

如果您正在寻找一种创建自定义_id的方法,那么

this question的已接受答案可能会有用。

提供了一定程度的保证唯一性。

答案 1 :(得分: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