我是Mongo的新手并试图弄清楚如何解析复杂的嵌套集合。
{
"_id": ObjectId("idVal"),
"Ids": [{
"mar": [{
"se": [{
"gootics": "UA-3-1"
}],
"usery": [{
"fc0633ac-81": [{
"sep": [{
"custS": "",
"promer": "0",
"reaivity": "20",
"stus": "active",
"urlist": "",
"upe": [
"mat "
],
"whlete": ""
}],
"uspt": [{
"cor": "000000",
"foron": "hthp",
"sla": "Join!",
"slie": "httpsg",
"slile": "Jost:",
"suody": "We'll be in touch.",
"sumer": "Awesome!",
"tte": "qumail"
}, {
"cr": "000000",
"refeion": "htve",
"sla": "Go!",
"slige": "httg",
"slle": "Hes",
"slle": "Mm:",
"tte": "rk"
}]
}]
}]
}],
And many more such inner array’ s,
comma separated
}]
}
我需要使用mar
查询或mongo
选择php
的整个部分。
db.collectionname.find({"Ids" : "mar"}).pretty()
。
这不会产生任何结果,只是空白并尝试db.collectionname.find({}).pretty()
,它运作良好,得到了所有结果。
我曾尝试使用$elemMatch
,$pop
等
许多解决方案都采用非常小而简单的json文件,没有人通过这种复杂的json字符串遍历或解析。参考其他标准流程或提供答案。
我在zist中的需要:我将只拥有Id的一个值,需要在Id的基础上进行查询。喜欢,
select * from db where Id's == Id I have
;在这种情况下,它可以是mar
任何人都可以帮我在php中编写相同的查询吗?并打印输出?我无法做到这一点。 "$ActualData = $collection->find(array("Ids.mar : 1"));"
但这不会打印任何值。
var_dump($array);
// Above line is printing this:
array (size=0)
empty
var_dump($ActualData);
//Above line is printing this:
object(MongoCursor)[4]
//not being executed at all:
foreach($ActualData as $doc)
{
echo "Inside it is";
var_dump($doc);
}
echo "Count:".count($ActualData)."\n";
//It does have 1 document
Count:1
答案 0 :(得分:1)
强烈建议您不要将动态值用作键。
如果您想获得mar
,则应在查询中使用投影。
db.collection.find({},{"Ids.mar":1})
在这种情况下,您必须知道密钥mar
。
在PHP中,您可以将以上查询转换为:
$data = $collection->find(array(),array("Ids.mar" => 1));
OR
// Search criteria
$query = array();
// Projection (fields to include)
$projection = array("Ids.mar" => 1);
$cursor = $collection->find($query, $projection);
foreach ($cursor as $doc) {
//print or process here
}