【问题标题】:return array item by using index in mongodb with php使用 php 在 mongodb 中使用索引返回数组项
【发布时间】:2015-03-03 09:43:07
【问题描述】:

我想知道如何在 php 中使用 mongodb 中的索引来返回数组项:

findOne(array('num[1]' => 'field_id')))

有办法吗?

【问题讨论】:

    标签: php mongodb mongodb-query


    【解决方案1】:

    MongoDB 有 "dot notation",这与 JavaScript 表单有点不同,因为这不是 JavaScript:

    findOne(array("num.1" => "field_id"))
    

    注意每个位置的数组索引是n-1,所以这意味着数组的“第二个”元素。

    请注意,此仅返回“仅该数组项”,而仅仅是“匹配”该位置的数组项的查询。如果您希望只返回匹配的项目,那么您也可以使用 positional $ 运算符和“投影”:

    findOne(array("num.1" => "field_id"),array( "num.$" => 1))
    

    【讨论】:

    • 出于某种原因,我以这种方式得到“空”。如果我想返回 "comment" { "num": [ { "group": "187", "ques": "question 1", "answ": [ { "desc": "answer 1" 我该怎么办,“对”:真 },{“desc”:“答案 2”,“对”:假 },{“desc”:“答案 3”,“对”:假 },{“desc”:“答案 4” ", "对": false } ], "comment": "comment 1" } ] }
    • @ValRus 您能否显示您的文档在 mongo“shell”中出现的实际结构。因为只是您评论中的内容,该字段不是“num”,而是实际上"comment.num"。了解明显的区别。
    • 抱歉没有说清楚,实际的结构是从 { 之后的,“comment”字符串正是我想要返回的内容
    • @ValRus 所以修改代码。你没这么问,我为什么要这么回答?我也不会在回答后回答改变的问题,因为我认为这是非常粗鲁的做法,并且经常对过去这样做的任何人投反对票。开个玩笑,但这确实不是一种可接受的做法,如果您更改初始问题的参数,也不会被善意地看待。
    • 你说的很对,我的缺点是我一开始没有提供完整的描述。正如您已经回答的那样,我确实尝试过,但它仍然没有返回值。但我非常需要它。
    【解决方案2】:

    你可以这样做:

    $id = new MongoId($text_id);
    $collection = $db->selectCollection ("mytable");
    $doc = $collection->findOne(array('_id' => $id));
    echo json_encode($doc); 
    

    【讨论】:

    • 我认为问题是“如何根据位置匹配数组中的元素”。不过,这不是您要回答的问题。
    • 可能,所以。我不太确定
    • 问题标题和尝试的代码很清楚。
    猜你喜欢
    • 2016-04-07
    • 2014-02-18
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多