0
所以這裏是我的嘗試它沒有工作,我不知道我需要做什麼,文檔解釋這只是坦白。mongodb加入兩個集合獲取數據
所以我希望有人在這裏知道如何做到這一點。
基本的概念:我已經存儲了用戶的主配置文件集合
成員集合
{
"_id" : ObjectId("aaaat656a464"),
"email" : "[email protected]",
"personal" : {
"name" : {
"firstname" : "Russell",
"lastname" : "Harrower"
},
"profile_id" : ObjectId("333a0e2b7acebe9b869b1b0a")
},
"kst" : ObjectId("111111111111g")
}
現在我想從members_media集合PROFILE_ID在用戶的最新資料圖片ID其中_id = PROFILE_ID
這是members_media收集
{
"_id" : ObjectId("333a0e2b7acebe9b869b1b0a"),
"data" : {
"url" : "https://scontent.xx.fbcdn.net/v/t1.0-1/11659354_1625058617782022_7822649569017662262_n.jpg?oh=6e2b74b33c1c4ea4cdc0094a1ae35e14&oe=59DF809A",
"type" : "facebook/image",
"date" : ISODate("2017-06-21T06:16:18.580Z"),
"profile_pic" : true
},
"uid" : ObjectId("111111111111g")
}
因此,這裏是我的嘗試
$check = $db->aggregate([
['$unwind'=> "$members_media"],
['$unwind' => ['path'=>"$members_media", 'includeArrayIndex'=>"arrayIndex"]],
['$lookup'=>
[
'from'=>"members_media",
'localField'=>"personal.profile_id",
'foreignField'=>"_id",
'as'=>"profilepic"
]
]
]);
然而,當我運行下面的它不會成員集合
$db = static::db()->members;
/*$check = $db->findOne(['kst' => New MongoDB\BSON\ObjectId($_SESSION["ipet_user"]), 'personal'=>['$exists'=>true]],
['personal.profile_id' => 1]
);*/
$check = $db->aggregate([
['$lookup' =>
[
'from'=>"members_media",
'localField'=>"members.personal.profile_id",
'foreignField'=>"_id",
'as'=>"data"
]
],
['$match' =>
['members.kst' => New MongoDB\BSON\ObjectId($_SESSION["user"]), 'members.personal'=>['$exists'=>true]]
],
['$unwind' => ['path' => '$members_media.data', 'includeArrayIndex' => 'arrayIndex']],
['$project' =>
['members.profile_path'=>'$data.url']
]
]);
我的結果是
object(MongoDB\Driver\Cursor)#19 (9) { ["database"]=> string(4) "ipet" ["collection"]=> NULL ["query"]=> NULL ["command"]=> object(MongoDB\Driver\Command)#18 (1)
你是假的關於收集名稱?你有沒有嘗試在shell中運行?因爲我認爲你應該。這很令人困惑,因爲你有兩次嘗試做兩件不同的事情。 '$ unwind'語句在聚合管道的頂部肯定沒有位置。第二看起來最接近可行。但是你真的應該分階段進行測試,並且如果你有正確的集合名稱,至少有一些想法。現在,它看起來沒有說服你已經徹底測試過。請告訴我們更多。 –