MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongoose:Przesyłanie do ObjectId nie powiodło się dla wartości

Przykład z dokumentów mangusty, do których się odwołujesz, używa Number dla personSchema._id pole i ObjectId dla innych.

Zakładam, że robią to w przykładzie tylko po to, aby pokazać, że można użyć obu. Jeśli nie określisz _id w schemacie ObjectId będzie domyślnym.

Tutaj wszystkie Twoje rekordy mają _id pole będące ObjectId , ale traktujesz je jak liczby. Ponadto pola takie jak personID i taskID nie istnieją, chyba że pominąłeś część, w której je definiujesz.

Jeśli chcesz używać numerów dla wszystkich swoich _id pola, musisz to zdefiniować w schematach.

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

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

Następnie, aby utworzyć wiadomość o określonym identyfikatorze i przypisać ją do twórcy:

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

Należy jednak zauważyć, że gdy używasz czegoś innego niż ObjectId jako _id dziedzinie, sam bierzesz na siebie odpowiedzialność za zarządzanie tymi wartościami. Identyfikatory obiektów są generowane automatycznie i nie wymagają dodatkowego zarządzania.

Edycja:zauważyłem również, że przechowujesz referencje po obu stronach swoich skojarzeń. Jest to całkowicie poprawne i czasami możesz chcieć to zrobić, ale pamiętaj, że musisz sam zadbać o przechowywanie referencji w pre hak.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoDB:Pokaż MinuteBucket w czasie jako czas zakończenia interwału

  2. Jak wyczyścić stare/nieaktualne sesje podczas korzystania z przechowywania sesji Mongo DB w Ruby on Rails 3.2?

  3. jak zignorować duplikaty dokumentów podczas korzystania z insertMany w bibliotece php mongodb?

  4. Wyświetlanie ostatniej wiadomości z każdej rozmowy z udziałem użytkownika w MongoDB

  5. Strefa czasowa Spring Mongodb Timestamp Wprowadzająca w błąd