我有一个嵌套的文档,它有一些语言相关的内容,我想搜索内容是否有特定语言的数据,查询应该返回我的内容,否则为false。
我尝试了这个查询选项
$data = $collection->findOne(array('original'=>'What is this', 'translation.language'=>'english') );
我期待这个结果:
{
"language": "english",
"quote": "What is this"
}
但上面的查询返回两种语言内容。任何人都可以分享一些关于使用PHP保存和更新数据的代码
我的收藏:
{
"_id": ObjectId("56a8844bc56760810e483815"),
"language": "english",
"original_key": "What is this",
"translation": [
{
"language": "english",
"quote": "What is this"
},
{
"language": "spanish",
"quote": "What is this Spanish"
}
]
}
答案 0 :(得分:0)
我认为你应该使用mongodb' aggregation pipeline。
这可能有用。未经测试。
db.collection.aggregate([
{$unwind :translation},
{$project: {original_key:true,language:true, quote:true}},
{$match:{original_key:"What is this", language:"english"}}
]);
答案 1 :(得分:0)
当您在所选文档中只需要一个特定数组元素时,在findOne()
方法的投影文档中使用 positional $
运算符:
// search criteria for nested array
$query = array(
'original' => 'What is this',
'translation.language' => 'english'
);
// projection (fields to include)
$projection = array('_id' => false, 'translation.$' => true);
$result = $collection->findOne($query, $projection);
$data = $result->translation;
var_dump($data);