0

mongodb に 2 つのコレクション、または mongoose に 2 つのスキーマ (ユーザーとアカウント) があります。ユーザースキーマ

{
  account: [{type: db.Schema.Types.ObjectId , ref: 'Account'}]
}

アカウント スキーマは次のようになります。

{network:String,
 firstName: String,
 lastName:String,
 networkId:Number,
 accessToken: String,
 accessTokenExpiration:Number,
 userId: {type: db.Schema.Types.ObjectId, ref: 'User'}
}

したがって、基本的にはユーザーとアカウントの間の 1 対多の関係です。エクスプレスでは、パラメーター userId (ユーザーの mongodb objectId と一致する) を持つ /api/user というユーザーの詳細を取得するルートがあります。このリクエストのユーザー オブジェクト全体を返したいと思います。サブドキュメント (つまり、すべてのユーザー アカウント) も含める必要があります。

例えば

{ "_id": "51e1b1b2993a51b0ce000005", "account": [ {
"network": "Facebook",
"networkId": xxxx,
"accessToken": "yyyyy",
"accessTokenExpiration": 11111,
"firstName": "John",
"lastName":"Doe"
} ] }

それよりも

{ "_id": "51e1b1b2993a51b0ce000005", "account": [ "51e1b1b2993a51b0ce000004" ] } 

ユーザーオブジェクトのアカウント配列を実際に繰り返してアカウントコレクションを検索することなく、これにmongodbまたはmongooseの方法がありますか。

ありがとう。

4

1 に答える 1

1

Mongoose には、この場合のために特別に設計された集団があります。

Users.findById(id)
  .populate('account')
  .exec(function (err, user) {
    if (err) return next(err);
    res.json(user);
  })

または、 express-mongooseプラグインを使用している場合:

res.send(Users.findById(id).populate('account'))
于 2013-07-13T22:48:21.810 に答える