php - MongoDb 使用 PHP 获取文档子集
问题描述
我有一个这样的 MongoDB 文档结构:
[
{
"locale":"en",
"translations":[
{
"name":"translation1",
"value":"enValue"
},
{
"name":"translation2",
"value":"enValue"
},
{
"name":"translation3",
"value":"enValue"
}
]
},
{
"locale":"ru",
"translations":[
{
"name":"translation1",
"value":"ruValue"
},
{
"name":"translation2",
"value":"ruValue"
},
{
"name":"translation3",
"value":"ruValue"
}
]
}
]
我需要获取带有translation1
locale名称的翻译en
。我想要的预期结果是:
{
"_id" : ObjectId("5e845ba1005e625a6237d2e0"),
"translations" : [
{
"name" : "translation1",
"value" : "enValue"
}
]
}
我知道如何用纯mongo做到这一点,它应该是这样的:
db.translations.find({"locale" : "en"},
{ translations: { $elemMatch: { name: "translation1" } } } )
这是证明https://gyazo.com/fb9b1a505a898c7137ece5304d715171
但我不能让它与 PHP 一起工作。我试过这样的代码:
$collection = $this->database->{$group};
$collection->find(
[
'locale' => 'en',
'translations' => ['$elemMatch' => ['name' => 'translation1']
]
);
我得到了所有的翻译,en
而不是仅仅tranlsation1
作为结果:
{
"_id" : ObjectId("5e845ba1005e625a6237d2e0"),
"locale" : "en",
"translations" : [
{
"name" : "translation1",
"value" : "enValue"
},
{
"name":"translation2",
"value":"enValue"
},
{
"name":"translation3",
"value":"enValue"
}
]
}
我试过:
$collection = $this->database->{$group};
$collection->find(
['locale' => 'en'],
[
'translations' => ['$elemMatch' => ['name' => 'translation1']
]
);
结果也和上面一样。
尝试过:
$collection = $this->database->{$group};
$collection->find(
[
'locale' => 'en',
[
'translations' => ['$elemMatch' => ['name' => 'translation1']
]
]
);
结果是null
作为一种解决方法,目前,我在 PHP 端过滤结果,但它需要额外的工作
解决方案
这似乎是驱动程序中的一个错误。
此数据库命令应该等同于find
您正在运行的命令,但是该命令按预期工作,而 find 没有。
$this->$database->command([
'find'=>'CollectionName',
'filter'=>['locale' => 'en'],
'projection'=>['translations' => ['$elemMatch' => ['name' => 'translation1']]]
])
推荐阅读
- spring - 如何使用 spring 存储库进行 bean 验证?
- cpanel - 当我遇到一些电子邮件问题时如何配置 WHM 服务器
- php - 电子邮件进入收件箱,但显示垃圾邮件
- mysql - MySQL:检查一列是否具有基于另一列的值
- html-table - Gmail 在我的 HTML 签名的第一行之后的行上添加 STRANGE 填充
- php - 从我的数据库中获取个人资料图片以显示在 php 页面上
- javascript - Laravel FatalErrorException:内存不足
- c - 如何修改 SYN/ACK 数据包的 IP 标头选项?
- dynamics-crm - CRM OnPrem--> Plugin--> Connect to External (SOAP) Webservice Error with connection
- javascript - 类型 [] 中缺少 JavaScript 类型脚本属性 0