MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose:Umwandlung in ObjectId für Wert fehlgeschlagen

Das Beispiel aus den Mongoose-Dokumenten, auf die Sie verwiesen haben, verwendet Number für personSchema._id Feld und ObjectId für die anderen.

Ich nehme an, sie tun dies im Beispiel nur, um zu demonstrieren, dass es möglich ist, beides zu verwenden. Wenn Sie _id nicht angeben im Schema ObjectId wird die Standardeinstellung sein.

Hier haben alle Ihre Datensätze eine _id Feld, das eine ObjectId ist , aber Sie behandeln sie wie Zahlen. Außerdem Felder wie personID und taskID existieren nicht, es sei denn, Sie haben den Teil weggelassen, in dem Sie sie definieren.

Wenn Sie Zahlen für alle Ihre _id verwenden möchten Felder, müssten Sie das in den Schemas definieren.

var newsSchema = new Schema({
  _id: Number,
  _creator: {type: ObjectId, ref: "Person"},
  // ...
})

var personSchema = new Schema({
  _id: Number,
  // ...
})

Um dann eine Nachricht mit einer bestimmten ID zu erstellen und sie einem Ersteller zuzuweisen:

var tony = new Person({_id: 0});
var newsItem = new NewsItem({_id: 0, creator: tony.id});

Beachten Sie hier jedoch Folgendes:Wenn Sie etwas anderes als ObjectId verwenden als _id übernehmen Sie die Verantwortung, diese Werte selbst zu managen. ObjectIds werden automatisch generiert und erfordern keine zusätzliche Verwaltung.

Bearbeiten:Mir ist auch aufgefallen, dass Sie Refs auf beiden Seiten Ihrer Assoziationen speichern. Dies ist völlig gültig und Sie möchten es vielleicht manchmal tun, aber beachten Sie, dass Sie sich selbst darum kümmern müssten, die Referenzen im pre zu speichern Haken.