MongoDB 使用过滤器查询嵌套文档

时间:2021-04-22 07:40:56

标签: php arrays mongodb filter find

我的 MongoDB 文档看起来像这样 -

{

"VENDOR_ID": "101",
"NAME": "Test",
"DELETEFLAG": "1",
"DATETIME_MODIFIED": "2021-04-22 05:31:27am",
"CONTACT": [{
    "CONTACT_ID": "111",
    "CONTACT_TYPE": "CONTACT",
    "DELETEFLAG": "1",
    "LID": "197",
    "USER_ID": "101",
    "VALUE": "222222222222"
}, {
    "CONTACT_ID": "222",
    "CONTACT_TYPE": "EMAIL",
    "DELETEFLAG": "1",
    "LID": "197",
    "USER_ID": "101",
    "VALUE": "Test@gmail.com"
}, {
    "CONTACT_ID": "333",
    "CONTACT_TYPE": "CONTACT",
    "DELETEFLAG": "2",
    "LID": "197",
    "USER_ID": "101",
    "VALUE": "444444444444"
}, {
    "CONTACT_ID": "444",
    "CONTACT_TYPE": "CONTACT",
    "DELETEFLAG": "2",
    "LID": "197",
    "USER_ID": "101",
    "VALUE": "888888888888"
}]

}

I want to fetch all the Contacts for which the **DELETEFLAG** is set to 1. 我的集合可以有多个供应商文档。

我正在使用 PHP 并获取所有 DELETEFLAG 设置为 1 的供应商及其联系人。我的查询看起来像这样 -

$filterproduct = array(
                "CONTACT.DELETEFLAG"=>'1',
                "DELETEFLAG" => '1',
                "LID"=>$LID,
          ); 
$resultproduct1 = $this->GetMany($collectionName,$filterproduct,$fetchArr);

 

1 个答案:

答案 0 :(得分:0)

如果我明白,你可能想要这个:

db.collection.aggregate([
  { $unwind: "$CONTACT" },
  {
    $match: {
      "CONTACT.DELETEFLAG": "1",                
    },
  },   
]);

Yopu 使用 $unwind 破坏所有与联系人联系的文档,因此,使用 $match 仅获取 CONTACT.DELETEFLAG = 1 的新生成文档。

相关问题