sql >> Database >  >> NoSQL >> MongoDB

Mongoose:casten naar ObjectId mislukt voor waarde

Het voorbeeld van de mangoestdocumenten waarnaar u verwijst, gebruikt Number voor de personSchema._id veld, en ObjectId voor de anderen.

Ik neem aan dat ze dit in het voorbeeld alleen doen om aan te tonen dat het mogelijk is om beide te gebruiken. Als u _id niet opgeeft in het schema, ObjectId zal de standaard zijn.

Hier hebben al uw records een _id veld dat een ObjectId . is , maar je behandelt ze als getallen. Verder kunnen velden als personID en taskID bestaan ​​niet, tenzij je het gedeelte hebt weggelaten waar je ze definieert.

Als je cijfers wilt gebruiken voor al je _id velden, moet u dat in de schema's definiëren.

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

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

Om vervolgens een nieuwsbericht met een bepaalde ID te maken en het toe te wijzen aan een maker:

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

Het ding om hier op te merken is echter dat wanneer u iets anders gebruikt dan ObjectId als de _id veld, neemt u zelf de verantwoordelijkheid op zich om deze waarden te beheren. ObjectIds worden automatisch gegenereerd en vereisen geen extra beheer.

Bewerken:ik heb ook gemerkt dat je refs aan beide kanten van je associaties opslaat. Dit is volkomen geldig en misschien wil je het soms doen, maar houd er rekening mee dat je zelf voor het opslaan van de referenties moet zorgen in de pre haak.



  1. Dynamische zoekopdrachten in MongoDB en Node.js

  2. MongooseError - Bewerking `users.findOne()` buffering time-out na 10000ms

  3. MongoDB dubbele documenten, zelfs na het toevoegen van een unieke sleutel

  4. Redis gebruiken om het SQL-resultaat te cachen