2017-09-29 8 views
0

私はnode.js、express、mongooseでapiを作成しています。私はモンゴセには新しく、私が望むことをするためのよりよい方法が存在するかどうか疑問に思っています。Mongoose、ObjectIDのセットで質問する

私は2つのコレクションを持っています:ユーザーと経費。

ユーザー例:

{ 
    "_id" : ObjectId("59c4bc6a39d9992d6407427e"), 
    "firstName" : "John", 
    "lastName" : "Doe", 
    "name" : "JohnD", 
    "password" : "xxxxx", 
    "__v" : 26, 
    "budget" : 400, 
    "saving" : 300, 
    "wage" : 1340, 
    "expenses" : [ 
      ObjectId("59cd076544fa3e64ec32c7e3"), 
      ObjectId("59cd07f0ed7bd2192cab72bd"), 
      ObjectId("59cd0a78e19060451059dce7"), 
      ObjectId("59cd0b24e19060451059dce8"), 
      ObjectId("59cd0b8fe19060451059dce9"), 
      ObjectId("59cdf34be19060451059dcf4"), 
      ObjectId("59cdf3c1e19060451059dcf5"), 
      ObjectId("59cdf417e19060451059dcf6"), 
      ObjectId("59cdf446e19060451059dcf7"), 
      ObjectId("59cdf46ee19060451059dcf8"), 
      ObjectId("59cdf4bce19060451059dcf9"), 
      ObjectId("59cdf6dee19060451059dcfa"), 
      ObjectId("59cdf6f5e19060451059dcfb"), 
      ObjectId("59cdf768e19060451059dcfc"), 
      ObjectId("59cdf798e19060451059dcfd"), 
      ObjectId("59cdf806e19060451059dcfe") 
    ] 
} 

費用例:

{ 
    "_id" : ObjectId("59cd07f0ed7bd2192cab72bd"), 
    "name" : "shopping", 
    "price" : 100, 
    "date" : 1506607687013, 
    "repetition" : 0, 
    "__v" : 0 
} 
{ 
    "_id" : ObjectId("59cd0a78e19060451059dce7"), 
    "name" : "gazoil", 
    "price" : 50, 
    "date" : 1506607687013, 
    "repetition" : 0, 
    "__v" : 0 
} 

私は、ユーザーがかかり、その費用のすべてを返す機能をしたいです。私はuser.expensesのすべてのobjectIdをループする必要がありますか、それともmongooseで直接行う適切な方法がありますか?

+0

スキーマの定義方法によって異なります。あなたがrefsを使用している場合は、https://stackoverflow.com/questions/10568281/mongoose-using-populate-on-an-array-of-objectid – chridam

答えて

3

マングースは、あなたがしても構わないと思っているものを行うための方法があります。Query Population

あなたがpopulate()メソッドを使用し、その後、あなたのスキーマ権を設定し、子供へのREFをプッシュする必要があります。

const user = await User 
    .findOne({ _id: 'yourObjId' }) 
    .populate('expenses') 
    .exec() 

console.log(user.stories) 
+1

を使用することができます。どうもありがとうございました :) – Naagar