mongo中使用的objectID对象在使用json来回传递和与其他应用程序通信时似乎有点难以处理。似乎要使用它,我必须在查询对象和json消息传递的字符串之间来回转换。
我认为,对于node-mongo-native来说,默认情况下将我的_id创建为字符串会很棒。像这样的东西会成为一个很好的独特id生成系统,也可以兼作时间戳:
function createID(){
return (Date.now() + ((Math.round(Math.random()*1000000))/1000000) ).toString();
}
我有没有办法让node-mongo-native使用这个函数来生成id而不是默认值?
答案 0 :(得分:2)
我从来没有遇到过你需要转换ObjectID的问题,但我可能使用的技术堆栈与你不同。
当您保存到数据库的对象尚未包含名为_id
的字段时,MongoDB文档的_id
字段仅作为ObjectId自动生成。如果此字段已存在于已保存的文档中,则其值将用作_id
。因此,当您想手动生成和分配ID时,您可以这样做。
但我建议你重新考虑用于生成ID的算法,因为它不会生成有保证的唯一ID。您似乎正在重新构建已解决的问题的解决方案 - 在数据库驱动程序的ObjectID生成中解决。如果您在使用ObjectID作为ObjectID类型时遇到问题而宁愿使用字符串,那么为什么不在将ObjectID分配给文档的_id之前生成ObjectID并将其转换为字符串呢?
yourDocument._id = new ObjectID().toHexString();
答案 1 :(得分:0)
我从来没有遇到过来回传递的问题,因为它会自动转换为字符串,如下例所示:
> var ObjectID = require('mongodb').ObjectID
undefined
> ObjectID.createPk()
52fcb07f46d17400006f44ac
> typeof ObjectID.createPk()
'object'
> JSON.stringify({_id: ObjectID.createPk()})
'{"_id":"52fcb09346d17400006f44ae"}'
> ObjectID.createPk().toString()
'52fcb09d46d17400006f44af'
你应该注意的唯一事情就是在用_id编写查询(用于获取记录或更新内容)时,我通常会这样做:
exports.getCustomerByID = function (id, callback) {
db.collection('customers').findOne({
_id: new ObjectID(id.toString())
}, callback);
};
此函数允许将id作为十六进制字符串或mongodb ObjectID传递。