0

我在 Mongo 中创建了一个“参数”集合,其结构如下:

{
    "_id" : "id1",
    "list" : [
        {
            "type" : "type1",
            "subtypes" : [ "id1 subtype11", "id1 subtype12" ]
        }
        {
            "type" : "type2",
            "subtypes" : [ "id1 subtype21", "id1 subtype22" ]
        }
    ]
}
{
    "_id" : "id2",
    "list" : [
        {
            "type" : "type1",
            "subtypes" : [ "id2 subtype11", "id2 subtype12" ]
        }
        {
            "type" : "type2",
            "subtypes" : [ "id2 subtype21", "id2 subtype22" ]
        }
    ]
}

我想全力以赴"subtypes"和。我发现在 Mongo shell 中执行此操作的方法是"_id":"id1""type":"type1"

db.params.find (
    { $and: [
        {"_id" : "id1"},
        {"list.type" : "type1"}
    ] }
)

我有两个问题:

  1. 我是否以正确的方式使用 $and(阅读:“我在创建查询”)吗?
  2. 如何正确将此查询解析为 PHP 代码?我迷失了语法:(。

谢谢!

4

2 回答 2

1

事实证明,回答这个问题的 PHP 代码其实并不难:

$query = array('_id' => 'id1', 'list.type' => 'type1');
$result = $collection->find($query);

/* Use this to access each element of the results */
foreach($result as $doc) {
    /* Code goes here */
}

如果一个人想使用每个值"type"代替(并打印它们例如),代码将是:

$output = [];
$query = array('_id' => 'id1');
$field = array('list.type' => true);

$result = $collection->find($query, $field);
foreach($result as $doc) {
    foreach($doc['list'] as $elem) {
        $output[] = $elem['type'];
    }
}

我通过在每个文档上使用该var_dump()函数并分析输出发现了所有这些。希望这对像我这样的初学者有所帮助。感谢 Sammaye 的提示!:)

于 2013-06-14T15:22:27.800 回答
1

$collection->find(array(), array('USERS.TASKS.MISSION_SAS_ID' => true));

使用上面的代码获取子文档数据

于 2013-10-25T08:37:43.397 回答