[英]How to get a object value nested inside document in a collection in MongoDB PHP
我已經在 MongoDB 中存儲了一個文檔集,如下所示,其中 ID 是通過 PHP 自動生成的
{
"_id": {
"$oid": "5ff745237d1b0000860007a6"
},
"user": "5ff741fb7d1b0000860007a4",
"name": "Test",
"slug": "fed73b70d080584c21e0a4353825ef91",
"category": "5fef4a467d1b000086000745",
"images": [{
"100x128": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg",
"200x256": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg",
"300x385": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg",
"500x642": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg"
},
{
"100x128": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg",
"200x256": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg",
"300x385": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg",
"500x642": "test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg"
}],
}
現在的問題是我想從第一個數組的鍵100x128
的images object
中獲取值。
我正在使用下面的代碼來實現
$productsArray = $collection->aggregate(
[
[
'$match' => [
'user_id' => $user_id
]
],
[ '$unwind' => '$images' ],
[ '$unwind' => '$images.100x128' ],
[
'$project' => [
'name' => 1,
'image' => '$images'
]
]
]
);
我總是得到一個 output 如下
MongoDB\Model\BSONDocument Object
(
[storage:ArrayObject:private] => Array
(
[_id] => MongoDB\BSON\ObjectId Object
(
[oid] => 5ff745357d1b0000860007a7
)
[name] => Test 1
[image] => MongoDB\Model\BSONDocument Object
(
[storage:ArrayObject:private] => Array
(
[100x128] => test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg
[200x256] => test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg
[300x385] => test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg
[500x642] => test/year/month/image_da4181762396a31ff44f5ddc08ce6186.jpeg
)
)
)
)
我不確定如何獲得該特定值。 我在哪里錯了?
就我收到您的問題而言,您似乎需要了解 mongo 概念。 因此,您可能會在 UI 或 PHP 中獲得數組表示,但最終它是 object。
仔細查看您發布的格式,object 中沒有數組,但有多個{}
,就像 JS 一樣,所以在這里忘記數組概念。
如果我的理解是正確的,這就是你要找的
$productsArray = $collection->aggregate(
[
[
'$match' => [
'user_id' => $user_id
]
],
[ '$unwind' => '$images' ],
[ '$unwind' => '$images.100x128' ],
[
'$project' => [
'name' => 1,
'image' => '$images.100x128'
]
]
]
);
無論您使用谷歌搜索或使用它都是正確的,您只需在$project
變量中添加第二個展開值,即$images.100x128
而不是$images
。
您可以這樣理解$unwind
變量使用遞歸邏輯來根據需要獲取 output 。 就像假設您在數組中首先有一個數組,它將從內部數組中獲取值,然后它將到達父數組,然后依此類推。 所以應該使用$unwind
變量中的最后一個值。
我不確定它是否適用於多個對象,但正如您所說,您只需要第一個。 這應該有魅力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.