Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mongo查询数组,当数组键未知时?_Php_Mongodb - Fatal编程技术网

Php Mongo查询数组,当数组键未知时?

Php Mongo查询数组,当数组键未知时?,php,mongodb,Php,Mongodb,我在数据库中有以下内容:, 我想找到搜索词为“打开”的项目 我想应该差不多是这样吧 在数据库中: [3b33162ad4ed5ffdeb88a1b2085535b1] => Array ( [_id] => 3b33162ad4ed5ffdeb88a1b2085535b1 [title] => Something [keywords] => Array ( [2

我在数据库中有以下内容:, 我想找到搜索词为“打开”的项目

我想应该差不多是这样吧

在数据库中:

[3b33162ad4ed5ffdeb88a1b2085535b1] => Array
    (
        [_id] => 3b33162ad4ed5ffdeb88a1b2085535b1
        [title] => Something
        [keywords] => Array
            (
                [2] => open
                [7] => source
            )

        [added] => MongoDate Object
            (
                [sec] => 1305884144
                [usec] => 658000
            )

    )

您可以像查询普通值一样在MongoDB中查询数组。下面是JavaScript Shell中的一个示例

> db.php.insert({title: "something", keywords: ["foo","bar"]})
> db.php.insert({title: "something", keywords: ["open","bar"]})
> db.php.insert({title: "something", keywords: ["baz","faz"]})
> db.php.find({ keywords: "open" });
{ "_id" : ObjectId("4dd677229a547d85bb02fce5"), "title" : "something", "keywords" : [ "open", "bar" ] }
为了更快的查询,您应该在数组上创建索引

db.php.ensureIndex({关键字:1})


您遇到的问题是数据的结构

MongoDB在查询时本机使用数组。以下内容将起作用

$document = array( 'keywords' => array('open', 'source') );
$collection->insert($document);
$collection->find( array('keywords' => 'open') );
问题是
关键字
不是文档中的数组。在您的文档中,关键字是另一个文档

'keywords' => array( '2' => 'open',
                     '7' => 'source' )
在JSON中,如下所示:

{ 'keywords' : { '2': 'open', '7': 'source' } };
根据您要做的事情,您需要将关键字保存为数组而不是哈希表

在PHP中,您在编写代码时处理的对象并不总是显而易见的。但是,如果您打印一个数组,它将如下所示。请注意,数组是以零为基的,并且不缺少任何键

    [keywords] => Array
        (
            [0] => open
            [1] => source
            [2] => rules
        )

问题是?有什么问题?为什么是嵌套数组(…)?这与PHP特定的问题有什么关系?他不知道如何查询关键字字段。我在JavaScript Shell中向他展示了如何做到这一点。他只需要将查询转换为PHP。可能是:$query=array(“关键字”=>“打开”)。我不明白!如果密钥未知,我仍然不知道如何查询。
    [keywords] => Array
        (
            [0] => open
            [1] => source
            [2] => rules
        )