Я новичок в MongoDB, и в настоящее время я использую MongoDB, размещенную в Atlas.
Мой код использует библиотеку PHP MongoDB.
База данных имеет коллекцию под названием "транзакции", которая имеет такойструктура:
[
{
"product":"X",
"customer":"John",
"history":[
{
"payment_date":"2017-07-01",
"status":"paid"
},
{
"payment_date":"2017-08-02",
"status":"paid"
},
{
"payment_date":"2017-09-03",
"status":"paid"
}
]
},
{
"product":"Y",
"customer":"Mary",
"history":[
{
"payment_date":"2017-07-01",
"status":"paid"
},
{
"payment_date":"2017-08-02",
"status":"paid"
},
{
"payment_date":"2017-09-03",
"status":"paid"
}
]
}
]
На основе этого ответа https://stackoverflow.com/a/39549711/1229477, У меня есть следующий код, пытающийся найти историю, что значение payment_date равно 2017-08-02
$manager = new \MongoDB\Driver\Manager(getenv('MONGODB_DSN'));
$db = new \MongoDB\Database($manager, getenv('MONGODB_DATABASE'));
$cursor = $db->transaction->find(
['history.payment_date' => '2017-08-02'],
['_id' => 0, 'history' => ['$elemMatch' => ['history.payment_date' => '2017-08-02']]]
);
return $cursor->toArray();
Ноон не возвращает элементов!
Это я пробую код в MongoShell, он работает!
Я также попробовал некоторый код, используя агрегат:
$manager = new \MongoDB\Driver\Manager(getenv('MONGODB_DSN'));
$db = new \MongoDB\Database($manager, getenv('MONGODB_DATABASE'));
$cursor = $db->transaction->aggregate(
[
[
'$match' => [
'history.payment_date' => "2017-08-02"
]
],
[
'$project' => [
'_id' => 0,
'history' => 1
]
]
]
);
return $cursor->toArray();
Я перешел по множеству ссылоки у меня нет успеха ни с одним из них!Поэтому я был бы признателен, если бы вы не дали мне другую ссылку, потому что я уже посетил сотни!