gpt4 book ai didi

php - elemMatch 查询在 php 中不起作用

转载 作者:可可西里 更新时间:2023-11-01 09:31:27 25 4
gpt4 key购买 nike

这个 mongodb 查询可以正确返回具有匹配子文档条件的文档

db.user.find(
{Type: {"$in": ["local","google"]},
Alerts:{$elemMatch:{"Frequency.Type":"daily","IsActive":true}}
})

当我将其转换为 php 数组时,它什么都不返回

$qry = array("Type"=>array('$in'=>array("local","google")),
array('Alerts'=>array('$elemMatch'=>array('Frequency.Type'=>'daily','IsActive'=>true))));

这是文档的结构

{
"Email" : "someemail@domain.com",
"Type" : "confirmed",
"FName" : "Sung",

"Alerts" : [
{
"Keyword" : "administrative",
"Frequency" : {
"Type" : "weekly"
}
"IsActive" : true
},
{
"Keyword" : "marketing",
"Frequency" : {
"Type" : "daily"
}
"IsActive" : true
}
]
}

当我从 php 数组中取出 elemMatch 部分时,它返回行。所以我正在连接并且那里有数据。不确定我是否对数组进行了正确编码,但我认为 $elemMatch 在 php mongodb 库中没有得到正确支持。聚合不是一种选择。我需要一个游标,因为这将返回大数据集并且不想使服务器崩溃。在网上搜索,找不到在 php 中完成的 $elemMatch mongodb 查询的工作示例。

最佳答案

你的数组太多了。

$qry = array(
"Type"=>array('$in'=>array("local","google")),
"Alerts"=>array('$elemMatch'=>array(
"Frequency.Type"=> "daily",'IsActive'=>true
))
);

以后,尝试像我一样缩进代码,这样您就可以清楚地看到结构。此外,由于您正在与已知的 JSON 结构进行比较,因此请执行以下操作:

echo json_encode( $qry, JSON_PRETTY_PRINT ) ."\n";

然后您可以清楚地看到您所做的与预期输出不匹配的内容。

关于php - elemMatch 查询在 php 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com