У меня уже есть текстовое поле jquery autocomplete, которое правильно отображает данные, но когда я добавляю $ group в запрос MongoDB, чтобы сделать выделение, я получаю требуемый json-массив в качестве ответа, но в текстовом виде автозаполнения ничего не отображается,
Ниже приведен мой результат запроса и ответ массива json на странице обработки
Мой первый запрос (Auto complete заполняется отлично)
$result = $collection->aggregate(array(
array(
'$match' => array(
'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
'Name_Status' => "P",
'Quote_Details.Quote_Status' => "p"
)
),
array(
'$unwind' => '$Quote_Details'
),
array(
'$match' => array(
'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
'Name_Status' => "P",
'Quote_Details.Quote_Status' => "p"
)
),
array(
'$group' => array(
'_id' => array(
'value1' =>'$Quote_Details.Quote_Catagory'
)
)
),
array(
'$project' => array(
'value' => '$Quote_Details.Quote_Catagory'
)
),
));
Результат json
[{"_id":{"$id":"538443bf05a7d1226d000000"},"value":"Inspirational"},{"_id":{"$id":"538443bf05a7d1226d000000"},"value":"Inspirational"},{"_id":{"$id":"538443bf05a7d1226d000000"},"value":"Imagination"}]
Новый запрос (заполняется автозаполнение, но ничего не отображается)
$result = $collection->aggregate(array(
array(
'$match' => array(
'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
'Name_Status' => "P",
'Quote_Details.Quote_Status' => "p"
)
),
array(
'$unwind' => '$Quote_Details'
),
array(
'$match' => array(
'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
'Name_Status' => "P",
'Quote_Details.Quote_Status' => "p"
)
),
array(
'$group' => array(
'_id' => array(
'value1' =>'$Quote_Details.Quote_Catagory'
)
)
),
));
результат json
[{"_id":{"value1":"Imagination"}},{"_id":{"value1":"Inspirational"}}]
Мой JQuery
$(document).ready(function(){
$("#catagr_id").autocomplete({
source:'insertionauto.php',
minLength:1,
select: function (event, ui)
{
//label = ui.item.label;
var value1 = ui.item.value;
$("#authnames").val(value);
console.log("hi");
//alert(label);
//alert(value);
$("#quote_id").autocomplete({
source:'autocatagquote.php?postcode='+value1,
minLength:1,
select: function (event, ui)
{
var label1 = ui.item.label;
var value1= ui.item.value;
console.log("hi");
//alert(label);
//alert(value);
}
});
}
});
});
если моя догадка верна, я получаю мультимассив в качестве второго результата, и результат не отображается в автозаполнении, но почему? Пожалуйста, помогите, должно быть что-то о группировке
Так что действительно работаем с методом автозаполнения jqueryui, который ожидает простой массив строк в качестве источника данных. Но сначала очистите свое агрегирование, так как в нем есть какие-то ненужные вещи, которые не помогают:
$result = $collection->aggregate(array(
array(
'$match' => array(
'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
'Name_Status' => "P",
'Quote_Details.Quote_Status' => "p"
)
),
array(
'$unwind' => '$Quote_Details'
),
array(
'$match' => array(
'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
'Name_Status' => "P",
'Quote_Details.Quote_Status' => "p"
)
),
array(
'$group' => array(
'_id' => '$Quote_Details.Quote_Catagory'
)
),
));
Поэтому нет причин _id
значение _id
в конце результата "group". И вы действительно хотите разбить объекты как простые строки для возвращаемого результата.
Затем вы просто перебираете массив php:
$myresult = array();
for ( $i = 0; $i < sizeof( $result ); $i++ ) {
$myresult[$i] = $result["result"][$i]["_id"];
}
json_encode( $myresult );
Итак, у вас просто есть массив строк, как требуется модулю plugin:
["Imagination","Inspirational"]
Дело в том, что метод плагина, включенный в API jqueryui, ожидает, что результаты будут просто массивом строк. Вы возвращаете объекты с неожиданными ключами, если только вы не манипулируете им.