Как реализовать поисковый запрос в поддокументе коллекции в mongodb с использованием библиотеки jenssegers / laravel-mongodb

Я использую библиотеку jenssegers / laravel-mongodb в проекте. У меня есть коллекция, в которой создан поддокумент с другими деталями. Теперь мне нужно реализовать поисковый запрос для поиска во вложенном документе коллекции. Поддокумент является product_data, в котором я хочу искать в индексе 6 этого. Я хочу найти название страны в нем. Как я могу это сделать. Структура коллекции выглядит следующим образом:

{
"_id": ObjectId("564d32f191c1cb1f087d7c71"),
"userid": "55c487a1083f11aa1b8b4567",
"shopid": "anotherstore",
"postedby": null,
"purpose": "sell",
"cat_ids": [
"TDC00-001-001",
],
"postdate": "2015-11-19",
"desc": "T-SHIRT",
"thumb": "http://test.local/uploads/product_img/prod-8yKsMHC2-1447895652.jpg",
"product_data"▼: {
"1": "2015-11-19",
"2": "anotherstore",
"3": "T-SHIRT",
"4": "1245",
"6": "Styling features include twin needle stitching for neatness and strength on the collar, sleeve and h",
"5": "US",
"6": "US"}
}

Я пытался с некоторыми запросами поиска, но не удалось. Это:

 $country=Array(
[0] => Australia
)
$country = Products::whereIn('product_data[6]', $country)->get();
or
$country = Products::where('books', 'elemMatch', array([6] => $country))->get();

Если кто-то знает, пожалуйста, помогите.

3

Решение

так как запрос для поддокументов выглядит так в монго:

db.products.find({'product_data.6':'US'});

вам просто нужно воссоздать эту структуру в вашем коде:

$country = 'US';
$queryFilter = ['product_data.6'=>$country];
Products::where($queryFilter)->first(); //or get whatever.

если вы хотите искать в массиве стран, вам придется использовать метод whereIn

$countries = ['US','SPAIN'];
$results = Products::whereIn('product_data.6',$countries)->get();
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]