2016-09-15 9 views
0

サブ文書配列の値に基づいてすべての文書をコレクションに入れようとしています。これは私が求めていたコレクションに私のデータ構造である:入れ子サブ配列の値に基づいて文書を取り出す

イベント:

{ 
    name: { type: String }, 
    members: {type: [{ type: ObjectId, ref: 'MemberGroup' }], default:[] } 
} 

MemberGroup:

{ 
    _id: ObjectId('...'), 
    name: "my event", 
    members: 
    [ 
     { 
      _id: ObjectId('...'), 
      name: "family", 
      users: [ObjectId('...'),ObjectId('...'),ObjectId('...')] 
     }, 
     { 
      _id: ObjectId('...'), 
      name: "work", 
      users: [ObjectId('...'),ObjectId('...'),ObjectId('...')] 
     } 
    ] 
} 

私は、これらのオブジェクトのスキーマがそうのように定義されていることを指摘しなければなりません

{ 
    name: { type: String }, 
    users: [{type: mongoose.Schema.Types.ObjectId, ref: 'User'}] 
} 

もちろん、ユーザーはidを持つ任意のオブジェクトです。

フェッチしようとしているもの: member.usersフィールドに特定のユーザーIDを持つすべてのイベントを取得したいとします。

私はここにその回の呼び出しで可能なイベントが、私が試したものですかどうかわからないんだけど:

var userId = new mongoose.Schema.ObjectId('57d9503ef10d5ffc08d6b8cc'); 
events.find({members: { $elemMatch : { users: { $in: [userId]} } }}) 

この構文の作品が、私はマッチする要素(使用がある知っているにもかかわらず、何の要素を返しませんデシベルを可視化するrobomongo)

+0

構文です:私のクエリは私に私の望ましい結果を与え、次に変更しました間違った - 4つの左の中括弧と5つの右の中括弧(右の閉じ括弧も欠落)。私は構文を修正し、それは動作します: 'db.events.find({メンバー:{$ elemMatch:{ユーザー:{ユーザー:{ユーザーID}}}})' – TomG

+0

@トムnope、 –

+0

私は理解していますが、私が言ったように、私はこのクエリを実行すると動作します。だから私はあなたが何か忘れていると思う... – TomG

答えて

0

だからstackoverflowの中に長い検索の後、私はここで良いanswareに出くわした:

MongoDB: How to find out if an array field contains an element?

var userId = new mongoose.Schema.ObjectId('57d9503ef10d5ffc08d6b8cc'); 
events.find({}, {members: { $elemMatch : { users: { $eq: userId} } }}) 

は予告代わりに(奇数)最初の1のクエリ制限を指定するには、2番目のFindパラメータの使用

関連する問題