-2
我有一個包含了一個嵌入文檔的產品,名爲意見的名字此文件:
{
"_id" : 1,
"name" : "test",
"comments" : [
{
"_id" : 2,
"userId" : 3,
"comment" : "hi",
"verified" : false,
"date" : ISODate("2017-09-18T21:21:02.280Z")
}
]
}
我用這個查詢在PHP中獲取評論:
$this->mongo_db->aggregate("Products", [['$unwind' => '$comments'], ['$sort' => ['comments.date' => -1]], ['$project' => ["name" => 1, "comments" => 1]], ['$match' => ['comments.verified' => false]], ['$project' => ["comments._id" => 1, "comments.date" => 1, "comments.dateD" => ['$dateToString' => ['format' => '%Y-%m-%d', 'date' => '$comments.date']]]]]);
這是我的結果:
{
"_id" : 1,
"comments" : {
"_id" : 2,
"comment" : "hi",
"date" : ISODate("2017-09-18T21:21:02.280Z"),
"dateD" : "2017-09-18"
}
}
這是我想在MongoDB中使用聚集結果:
{
"_id" : 1,
"name": "test",
"comments" : {
"_id" : 2,
"comment" : "hi",
"date" : ISODate("2017-09-18T21:21:02.280Z"),
"dateD" : "2017-09-18"
}
}
現在我想要獲得產品名稱,並且我在$ project中寫入name => 1,但沒有任何返回。當我刪除第二個$項目管道它工作正常。
。如果你只是完全從管道中移除這兩個'$ project'階段,那麼文檔狀態基本上是不變的。所有'$ unwind'都會爲每個數組成員創建一個新的文檔副本。所以它不是'$ unwind'改變文件,它是「你」。 –
@NeilLunn除去兩個$ project後,我該如何使用這個**「comments.dateD」=> ['$ dateToString'=> ['format'=>'%Y-%m-%d','date '=>'$ comments.date']] **? – WithoutBrain1994
'$ project'要求你**明確地指定你想返回的每一個屬性。您只能在新的流水線階段訪問您從前一個流程中發出的數據。因此,只需將'name =>'**添加到相同的舞臺**。並刪除較早的'$ project',因爲它基本上是無用的。 '$ dateToString'在沒有'$ group'的情況下是非常沒用的。如果你打算'$ group',那麼你應該直接在那個階段寫這個。所以看起來你問的是錯誤的問題。 –