1. ホーム
  2. mongodb

[解決済み] Mongoose: ディープポピュレーション(人口の多いフィールドに人口を投入する)。

2023-02-23 12:33:10

質問

私は Category というモデルがあります。

Category:
    ...
    articles: [{type:ObjectId, ref:'Article'}]

記事モデルには Account model .

Article:
    ...
    account: {type:ObjectId, ref:'Account'}

ということで、ポップな articles カテゴリモデルはこうなります。

{ //category
    articles: //this field is populated
     [ { account: 52386c14fbb3e9ef28000001, // I want this field to be populated
         date: Fri Sep 20 2013 00:00:00 GMT+0400 (MSK),
         title: 'Article 1' } ],
    title: 'Category 1' }

質問は、入力されたフィールド([articles])のサブフィールド(account)にどのように入力するかということです。以下は、私が今それを行う方法です。

globals.models.Category
    .find
        issue : req.params.id
        null
        sort:
            order: 1
    .populate("articles") # this populates only article field, article.account is not populated
    .exec (err, categories) ->
        console.log categories

ここで議論されてたのは知ってるけど マングース 入力されたフィールドに値を入れる というのがありますが、本当の解決策は見つかっていません。

どのように解決するのですか?

Mongoose には、新しいメソッド Model.populate を追加しました。

https://github.com/Automattic/mongoose/issues/1377#issuecomment-15911192