2017-09-22 12 views
0

私はCMSを構築しようとしている、と私はDBでこのようなものがあり:マングースJS:リターン人口データ

は私がコレクションにカテゴリを配置する必要がありますいくつかの理由があります
// an article in Article collection 
{ 
    "_id": ObjectId("1234"), 
    "title": "JavaScript Basics", 
    "category": ObjectId("0001") 
} 

// a category in Category collection 
{ 
    "_id": ObjectId("0001"), 
    "name": "JavaScript" 
} 

、埋め込まれていないが資料。 記事を取得する場合、私はこのような情報を取得したい:

{ 
    "title": "JavaScript Basics", 
    "category": "JavaScript" 
} 

私はマングースのpopulateを使用しようとしました:

Article.findOne({_id: "1234"}) 
.populate('tags', 'name -_id') 
.exec() 
.then(article => { /* ... */ }) 

と私は

{ 
    "title": "JavaScript Basics", 
    "category": {"name": "JavaScript"} 
    // compare to: "category": "JavaScript" 
} 

は、だから私は処理する必要がありましたcategory、私はそれほどエレガントではないと思います。この問題を処理するソリューションはありますか?

また、私はマングースのゲッターとセッターに「idでカテゴリを検索する」のコードを置くことが可能です場合は考えている:

ArticleSchema.path('category') 
.set(function(categoryName) { 
    // find categoryId by categoryName and set it 
}) 
.get(function(categoryId) { 
    // find category name by id and return it 
}); 

それが動作し、私は顔を必要としない場合、それが良いだろう前に述べた問題。しかし、非同期コード(idでカテゴリを見つける)はここでサポートされていないようですが、マングースのセッターとゲッタでこれらのことを達成することは可能でしょうか?

ありがとうございました。

答えて

0

ポピュレートするときはいつでも、ポピュレートされたオブジェクトが必要なので、コールバック関数の前に.exec()の前に置く必要があります。

Article.findOne({_id: "1234"}).populate('tags', 'name').exec(function(err,article){}) 
+0

あなたの回答をよりよく理解できるように、回答に文脈を追加してください – bennygenel

関連する問題