2017-05-15 65 views
0

我是mongo db的新手。我正在尝试基于年龄键获取记录,但查询总是返回空结果。如何从对象键中获取mongo db的数据php

这里是JSON字符串

"age_premium": { 
    "age": {  
    "65": { 
     "Plan A": "136.24", 
     "Plan B": "140.33", 
     "Plan F": "172.72", 
     "Plan G": "142.95", 
     "Plan N": "117.45" 
    }, 
    "66": { 
    "Plan A": "136.24", 
    "Plan B": "140.33", 
    "Plan F": "172.72", 
    "Plan G": "142.95", 
    "Plan N": "117.45" 
    }}} 

我想根据年龄值获取数​​据。

我尝试使用此查询

$collection->find(array('age_premium.age'=>'65')); 
+0

'age_premium.age'是一个对象,而不是一个字符串。在v3.6中,您将能够在聚合框架中使用'$ objectToArray'。在此之前,唯一的选择是MapReduce,它是一个ETL工具,不推荐用于操作查询。另外,请记住,类型很重要:比较字符串时,'8'>'70'>'120'。 –

+0

@AlexBlex现在有什么解决方案? – Tuhin

+0

更改模式以使“age”是一个数组,并且嵌入文档将年龄作为数字。 –

回答

0

现在你可以使用$where获取JavaScript的评价:

$collection->find(array('$where'=>'for(var i in this.age_premium.age){if(i == 65){return true}} return false')); 

其中通过age_premium.age所有属性循环,做类型转换,并比较值为每个文件。它非常慢,不能使用索引。这可能是一个快速补丁,但您确实需要更改文档的结构以支持这种查询。