Я пытаюсь преобразовать сценарий PHP, который основан на базе данных MySQL, чтобы запустить его на базе данных MongoDB. Я решил основные вопросы, кроме одного.
Представьте, что у меня есть библиотека (это коллекция), каждый документ представляет собой запись в книге. Поэтому мне нужно знать, сколько разных авторов в библиотеке написано на определенном языке (другое поле).
На данный момент у меня есть этот код, и я не знаю, как продолжить:
$test = array(
array(
'$group' => array(
'_id' => array('author' => '$author' )
)
)
);
$out = $db->$collection->aggregate($test);
Благодарю.
Если вы хотите установить фильтр, вам нужно запустить конвейер с $ матч,команда будет:
db.collection.aggregate([
{ "$match" : {lang : "en"} },
{"$group":{"_id": {"author" : "$author"} , "total" : {"$sum" : 1} }}
])
Если вы конвертируете это в PHP, это будет:
$test = array(
array('$match' => array("lang" => "en")),
array(
'$group' => array(
"_id" => array('author' => '$author'),
"total" => array('$sum' => 1)
),
),
);
В этом случае вы должны передать язык на первом этапе (сопоставить / отфильтровать).
Если вы хотите, чтобы для «всех языков» вам просто нужно поместить язык в оператор $ group
db.collection.aggregate([
{"$group":{"_id": {"author" : "$author", lang : "$lang"} , "total" : {"$sum" : 1} }}
])
Я позволю вам подтолкнуть это в PHP
Вы можете найти больше информации о $ матч Вот:
http://docs.mongodb.org/manual/reference/operator/aggregation/match/
Других решений пока нет …