recherche

Maison  >  Questions et réponses  >  le corps du texte

mongodb - mongoose中自建的_id是怎么生成的?

从官方mongoose v3.8.7的手册中看到关于Schema的_id属性,发现这个属性在new一个模型的时候就已经生成了,这个时候根本就没有和MongoDB通信!
我好奇mongoose是如何生成这个_id的值的,它能保证唯一性么?

另外,官方提到可以关闭这个特性,但是

var schema = new Schema({ name: String }, { _id: false });
var Page = mongoose.model('Page', schema);
var p = new Page({ name: 'mongodb.org' });
console.log(p); // { name: 'mongodb.org' }

// MongoDB will create the _id when inserted
p.save(function (err) {
  if (err) return handleError(err);
  Page.findById(p, function (err, doc) {
    if (err) return handleError(err);
    console.log(doc); // { name: 'mongodb.org', _id: '50341373e894ad16347efe12' }
  })
})

实际测试发现根本就不会save成功,会提示:

[Error: document must have an _id before saving]

请问如何关闭_id后实现保存?

黄舟黄舟2864 Il y a quelques jours654

répondre à tous(3)je répondrai

  • 大家讲道理

    大家讲道理2017-04-22 09:02:20

    Chaque document doit avoir un _id et il ne peut pas être répété.
    Si vous désactivez cette fonctionnalité, vous devez créer vous-même un _ID
    Donc, bien sûr, vous ne pouvez pas le sauvegarder.

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-22 09:02:20

    Tout d'abord, _id est un identifiant d'objet globalement unique dans mongodb, et il n'y aura pas de doublons.
    La valeur de _id peut également être définie par vous-même. Si aucune définition n'est ajoutée, le système utilisera l'identifiant d'objet de 12 octets généré par défaut

    .

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-22 09:02:20

    Professionnel parlant, ça devrait être :
    4323原则

    • Horodatage Unix à 4 chiffres

    • Code machine à 3 chiffres

    • Numéro de processus à 2 chiffres

    • Code compteur à 3 chiffres, commençant à partir d'un nombre aléatoire

    Mongod générera un identifiant basé sur les résultats obtenus ci-dessus ! ~

    répondre
    0
  • Annulerrépondre