2017-11-18 18 views
0

私はExpressJS + MongoDB + TypeScriptを使用しています。以下は、私がMongoDB参照値が更新されていません


export class Author { 
    name: string; 
    dob: Date; 
} 

export class Publisher { 
    name: string; 
    address: string; 
} 

import {Author} from './Author'; 
import {Publisher} from './Publisher'; 

export class Book { 
    name: string; 
    price: number; 
    author: Author; 
    publisher: Publisher; 
} 

は、私は以下のようにデータを挿入した持っているモデルです

let publisher1: Publisher = new Publisher(); 
publisher1.name = "Publisher 1"; 
publisher1.address = "Amritsar"; 

let publisher2: Publisher = new Publisher(); 
publisher2.name = "Publisher 2"; 
publisher2.address = "Bangalore"; 

let author1: Author = new Author(); 
author1.name = "Author 1"; 
author1.dob = new Date(); 

let author2: Author = new Author(); 
author2.name = "Author 2"; 
author2.dob = new Date(); 

let book1: Book = new Book(); 
book1.name = "Book 1"; 
book1.price = 50; 
book1.author = author1; 
book1.publisher = publisher1; 

let book2: Book = new Book(); 
book2.name = "Book 2"; 
book2.price = 100; 
book2.author = author2; 
book2.publisher = publisher2; 

let book3: Book = new Book(); 
book3.name = "Book 3"; 
book3.price = 150; 
book3.author = author1; 
book3.publisher = publisher2; 

パブリッシャー(2つのドキュメント)、作成者(2つのドキュメント)、書籍(3つのドキュメント)の3つのコレクションが作成されています。

今、私は以下のコードを使用して者1著者5の名前を更新するとき、それは作者のコレクションに変更されます。

this.db.collection('Author').findOneAndUpdate({ 
    name: "Author 1" 
}, { 
    $set: { 
     name: "Author 5" 
    } 
}) 

しかし、私はブック3またはブック1名でブックを照会するとき、それはまだ名前著者1の代わりに、著者5

を指し参照しながら、何か問題はありますブックコレクションのドキュメントに

答えて

1

BookスキーマのauthorフィールドにAuthorスキーマと同じスキーマが指定されています。ブックを作成し、フィールドにauthorの値として作成者レコードを渡すと、ブックレコードに値が直接設定されます。 2つのレコードをリンクしていません。両方のレコードの名前を更新するには、Authorコレクション内の名前とBookコレクション内の対応するすべてのレコードの名前を更新する必要があります。

+0

私はこの問題について詳しく読んで、これを処理する別のアプローチがあることを発見しました。私が試みているのは間違っている。助けてくれてありがとう。 – Sahil

関連する問題