【问题标题】:How to implemet search query in subdocument of a collection in mongodb using jenssegers/laravel-mongodb library如何使用 jenssegers/laravel-mongodb 库在 mongodb 集合的子文档中实现搜索查询
【发布时间】:2025-12-17 03:00:02
【问题描述】:

我在项目中使用 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();

如果有人知道请帮忙。

【问题讨论】:

    标签: php mongodb laravel-5 jenssegers-mongodb


    【解决方案1】:

    因为在 mongo 中子文档的查询看起来像这样:

    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(); 
    

    【讨论】:

    • 有没有办法搜索 $country 是否是一个数组。意思是这样的。 $country => 数组 ( [0] => 阿布哈兹 [1] => 阿富汗 )
    • 确定如果您在 WhereIn 下查看位于 jenssegers API 的 API,您会看到正确的格式 $countries = ['US','SPAIN']; $results = Products::whereIn('product_data.6',$countries)->get();