/ / Substituir o método ObjectID para node-mongo-native - node.js, mongodb e node-mongodb-native

Substitua o método ObjectID para node-mongo-native - node.js, mongodb e node-mongodb-native

O objeto objectID usado no mongo parece ser umpouco difícil de lidar quando se trata de passar para frente e para trás com o json e se comunicar com outros aplicativos. Parece que para usá-lo, eu tenho que converter entre o objeto para consulta e a string para a passagem de mensagens json.

Eu acho que seria ótimo, em vez disso, para o node-mongo-native criar meus _id "s como strings por padrão. Algo como isso tornaria um bom sistema de geração id único que também funciona como um timestamper:

function createID(){
return (Date.now() + ((Math.round(Math.random()*1000000))/1000000) ).toString();
}

Existe uma maneira de eu ter o nó mongo-nativo usar essa função para geração de id em vez do padrão?

Respostas:

2 para resposta № 1

Eu nunca encontrei os problemas que você descreveu com ter que converter ObjectID "s, mas eu provavelmente uso uma pilha de tecnologia diferente do que você.

o _id campo de um documento MongoDB só é gerado automaticamente como um ObjectId quando o objeto que você salva no banco de dados não contém um campo chamado _id. Quando este campo já existir no documento salvo, seu valor será usado como _id. Então, quando você deseja gerar e atribuir ids manualmente, você pode fazer isso.

Mas eu sugiro que você repensar seu algoritmopara gerar ID's, porque ele não gera IDs únicos garantidos. Parece que você está reinventando uma solução para um problema que já está resolvido - resolvido na geração de ObjectID do seu driver de banco de dados. ObjectID como tipo ObjectID e prefere usar uma string, então por que não gerar um ObjectID e convertê-lo em uma string antes de atribuí-lo ao _id do seu documento?

 yourDocument._id = new ObjectID().toHexString();

0 para resposta № 2

Eu nunca tive problemas para passar e para trás porque ele é automaticamente convertido em string, conforme mostrado nestes exemplos:

> var ObjectID = require("mongodb").ObjectID
undefined

> ObjectID.createPk()
52fcb07f46d17400006f44ac

> typeof ObjectID.createPk()
"object"

> JSON.stringify({_id: ObjectID.createPk()})
"{"_id":"52fcb09346d17400006f44ae"}"

> ObjectID.createPk().toString()
"52fcb09d46d17400006f44af"

A única coisa que você deve tomar cuidado é ao escrever uma consulta (tempo para buscar registros ou atualizar coisas) com o _id, eu costumo fazer isso:

exports.getCustomerByID = function (id, callback) {
db.collection("customers").findOne({
_id: new ObjectID(id.toString())
}, callback);
};

Esta função permite passar um id como uma string hexadecimal ou como um ObjectID mongodb.