【问题标题】:Access JSON field starting with "@" - PHP MongoDB library访问以“@”开头的 JSON 字段 - PHP MongoDB 库
【发布时间】:2017-12-23 16:20:09
【问题描述】:

我有一个 MongoDB 数据库,其中包含由遵循此模式的 persons 组成的集合

    "_id" : ObjectId("5a3be781575621b1e1c7512d"),
    "@id" : "http://minerva.atcult.it/rdf/12749587-539f-359f-a48a-e3a2279c8fa8",
    "@type" : "foaf:Person",
    "name" : "Gallenga, Romeo"

和另一个由 items 组成的集合像这样

{
    "_id" : ObjectId("5a3be71b575621b1e1c73f24"),
    "@id" : "http://minerva.atcult.it/rdf/000000017103",
    "@type" : [
            "bibo:MultiVolumeBook",
            "bibo:Book"
    ],
    "creator" : [
            "http://minerva.atcult.it/rdf/9959464b-24e6-338f-b79a-5705848861cd",
            "http://minerva.atcult.it/rdf/22ef493f-52ed-3b13-9756-03db125128e1",
            "http://minerva.atcult.it/rdf/adc7ca8d-ebb5-3879-bb76-38f7344a978d",
            "http://minerva.atcult.it/rdf/3a483833-4ada-30a6-8157-f4c61c6daf47"
    ],
    "identifier" : "000000017103",
    "title" : "Replica della formella del 14 sec. del campanile di Giotto raffigurante uno studio medico",        
}

我正在使用 MongoDB 库处理 PHP 5.6。

目标

我想查询具有特定创建者(显然是)的项目
通过查询(有效)

$authorlist=$pcollection->find(['name'=>$pregex],['projection'=>['_id'=>0,'@id'=>1,'name'=>1]]);

涉及正则表达式 $pregex ,我检索了该人的投影(包含 @idname 字段),然后我尝试编写以下查询以获取 itemscreator 字段和 persons@id 字段之间的匹配项>

  $documentlist=$icollection->find(['creator'=>($person->@id)]);

但它不起作用,因为 PHP 不接受以 @ 开头的字段(IDE 说“预期的字段名称”)。
我也试过了

$documentlist=$icollection->find(['creator'=>($person->'@id')]);

但它没有用。
那么,在 PHP 中访问以“@”开头的 JSON 字段的方法是什么?

【问题讨论】:

  • $person->{'@id'}?
  • 它有效,如果您将其重写为答案,我会接受它。谢谢!

标签: php json mongodb character-encoding php-mongodb


【解决方案1】:

我想它已经是重复的了,但是访问具有非常规名称的字段通常是这样的:

$person->{'strange-field-name'};
// for your case it is:
$person->{'@id'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2011-06-15
    • 2018-12-02
    • 2021-05-30
    • 2023-01-09
    相关资源
    最近更新 更多