2016-12-14 14 views
0

私は3つのコレクションを持っています:User、Link、LinkView。

User: 
{ 
    "_id": "ID", 
    "username": "nick" 
} 

Link: 
{ 
    "_id": "ID", 
    "url": "http://google.com/", 
    "user": { 
     "$ref": "User", 
     "$id": "ID", 
     "$db": "database_name" 
    } 
} 

LinkView: 
{ 
    "_id": "ID", 
    "created": "date", 
    "link": { 
     "$ref": "Link", 
     "$id": "ID", 
     "$db": "database_name" 
    } 
} 

は、今私は、特定のユーザーが作成したLinkViewsを取得したいが、私はこの$の試合をしようとすると、私に空のデータを返します:

{ 
    $match: { 
     "link.user.id" : "ID" 
    } 
} 

私は特定のユーザによってLinkViewsを選択することができますどのように?

サンプルデータ:

User: 
{ 
    "_id" : "584e7fee1ccd5604a52ec901", 
    "username" : "nick", 
} 

Link: 
{ 
    "_id" : "584e814e1ccd5604ac025313", 
    "url": "http://google.com/", 
    "user": { 
     "$ref": "User", 
     "$id": "584e7fee1ccd5604a52ec901", 
     "$db": "test" 
    } 
} 

LinkView: 
{ 
    "_id": "584e82191ccd560f0b690791", 
    "created": "2016-12-12T09:54:10.000Z", 
    "link": { 
     "$ref": "Link", 
     "$id": "584e814e1ccd5604ac025313", 
     "$db": "test" 
    } 
}, 
{ 
    "_id": "584e82191ccd560f0b690795", 
    "created": "2016-12-12T10:54:10.000Z", 
    "link": { 
     "$ref": "Link", 
     "$id": "584e814e1ccd5604ac025313", 
     "$db": "test" 
    } 
}, 
{ 
    "_id": "584e82301ccd560f0b690796", 
    "created": "2016-12-12T11:54:10.000Z", 
    "link": { 
     "$ref": "Link", 
     "$id": "584e814e1ccd5604ac025313", 
     "$db": "test" 
    } 
} 

集約パイプラインの例は:

Array 
(
[0] => Array 
    (
     [$project] => Array 
      (
       [hour] => Array 
        (
         [$hour] => $created 
        ) 

      ) 

    ) 

[1] => Array 
    (
     [$match] => Array 
      (
       [link.user._id] => 584e7fee1ccd5604a52ec901 
      ) 

    ) 

[2] => Array 
    (
     [$group] => Array 
      (
       [_id] => $hour 
       [value] => Array 
        (
         [$sum] => 1 
        ) 

      ) 

    ) 

) 
+0

あなたが試したすべてのクエリを共有したり、データをサンプリングしたりできますかLinkViewのために? –

+0

テキストに追加、希望はOKです。 –

答えて

0

ユーザーによって作成されたリンクのビューを取得するには、あなたが必要$lookupパイプラインのカップルは、次のように:

db.user.aggregate([ 
    { "$match": { "_id": "ID" } }, 
    { 
     "$lookup": { 
      "from": "link", 
      "localField": "_id", 
      "foreignField": "user", 
      "as": "userlink" 
     } 
    }, 
    { "$unwind": "$userlink" }, 
    { 
     "$lookup": { 
      "from": "linkview", 
      "localField": "userlink", 
      "foreignField": "link", 
      "as": "linkview" 
     } 
    } 
]) 
+0

私はしようとしましたが、空の結果が同じになっています:X –

+0

あなたのコレクションの名前が正しいかどうかチェックしましたか?上の例ではすべて小文字で ":" linkview "、...' "from": "link"、 "あなたの質問は大文字になりますか?" – chridam

+0

はい、それは正しいです:/ –

関連する問題