2016-06-16 4 views
2

にネストされたクエリを作りますか?は、私が<strong>サブイベント<strong>ユーザー</strong>に属する<strong>イベント</strong>に属する</strong>持っている、と私はユーザーのユーザー名を知っているのMongoDB 3.0.7

これは正しい方向に進んでいますか?それとも完全にオフですか?

db.subevents.find({_id: {$in: 
    db.events.find({_id: {$in: 
     db.users.find({"username":"userx"},{_id:1})}},{_id:1})}}) 

編集:ここではは、データ構造のサンプルです:

/* Event */ 
{ 
    "_id" : "XjhAqqNBkezKY3mdN", 
    "name" : "My event", 
    "userId" : "FiKsAAAgBb7cNoPH7" 
} 
/* Subevent */ 
{ 
    "_id" : "WkYAqBXNpJryp7rum", 
    "name" : "The subevent", 
    "eventId" : "hQXNzX3jbWppbAYFH" 
} 
/* User */ 
{ 
    "_id" : "RTHh5srhLMQp625zF", 
    "username" : "userx" 
} 
+4

データ構造のサンプルを投稿できますか? – KaSh

+0

MongoDBのバージョンは? – styvane

+0

それはMongoDB 3.0.7 – Cos

答えて

1

を文書化し、私は一緒にこのソリューションを置きますユーザに属するすべてのサブイベントを取得する:

var userIds = db.users.find({"username":"userx"}).map(function(user) { 
    return user._id; 
}); 
var eventIds= db.events.find({userId: {$in:userIds}}).map(function(event) { 
    return event._id; 
}); 
db.subevents.find({eventId:{$in:eventIds}}); 
0

唯一の方法は、モンゴ3.0.7

  1. で3つのddifrentコールを作ることですGetUSerData
  2. GetEventData
  3. GetSubEventData

ここにリレーショナルスキーマがあるので、これは簡単です。

スキーマを改善し、1つのイベントにサブイベント文書を埋め込むことにより、サブイベントのコレクションを削除することができ、3つの異なるコールを使用するprofesor79のアドバイスに従い

EDIT

/* Event */ 
{ 
    "_id" : "XjhAqqNBkezKY3mdN", 
    "name" : "My event", 
    "userId" : "FiKsAAAgBb7cNoPH7" 
    "subewents" : [{ 
      "_id" : "WkYAqBXNpJryp7rum", 
      "name" : "The subevent", 
      "eventId" : "hQXNzX3jbWppbAYFH" 
     }, { 
      "_id" : "WkYAqBXNpJryp7rum2", 
      "name" : "The subevent2", 
      "eventId" : "hQXNzX3jbWppbAYFH" 
     }, { 
      "_id" : "WkYAqBXNpJryp7rum", 
      "name" : "The subevent", 
      "eventId" : "hQXNzX3jbWppbAYFH" 
     } 
    ] 
} 

/* User */ 
{ 
    "_id" : "RTHh5srhLMQp625zF", 
    "username" : "userx" 
} 
+0

例えば、イベントIDを配列に抽出し、その配列を使用してsubEventデータを取得する必要がありますか?それほど問題がなければ、コードサンプルを少し見せてくれますか? – Cos

+0

@Cos - 提案された構造の私の編集を参照してください - これがあなたのケースで意味を持っているかどうか教えてください。 – profesor79

+0

ありがとうございます。しかし、この時点で私はスキーマを変更するオプションがありません。 3つの異なる呼び出しの構築。 – Cos

関連する問題

 関連する問題