2015-10-20 147 views
0

我有一个结构类似这样的数据:查询属性

parent: [ 
    { 
     val1: 'some data', 
     val2: 'some data' 
    }, 
    { 
     val1: 'some data', 
     val2: 'some data 
    } 
] 

如果我想查询所有嵌套对象属性“VAL1”的“父”阵中,有一个简洁的这样做的方式,即使对象没有钥匙?

编辑:扩大这个问题。

基本上,我希望能够在我的实际查询中针对val1检查值,而不是获取数据库的每一行,然后使用PHP循环遍历它们。我不知道数组中的对象的数量,所以我不能直接查询它们,例如$ collection-> find(array('parent [0]'=>'some data'))。我希望能够做相当于“找到所有具有包含在'父'数组中的属性val1设置为____的对象的行。

+0

'的foreach($ VAR->母公司为$ OBJ)打印$ obj-> val1;'? –

+0

是的,它们有一个键。'[]'是一个数组。'parent [1] .val1' - >'some data'。不可能有无键数据结构。要么我t有一个隐式数字键(数组),或者它有一个字符串键(对象)。 –

+0

感谢您的回复。我意识到有一个数字键,我的意思是如果我不知道数组中的对象的数量,那么我怎么能查询他们都没有明确的参考特定的关键?为了清楚起见,我会更新这个问题。 – user3494677

回答

0

您可以使用$elemMatch来匹配文档中的一个键包含对象的数组。

db.myCollection.find({ parent: { $elemMatch: { val1: someValue }}}); 

这是蒙戈代码,你必须把它转换为PHP通过蒙戈驱动程序访问。