MongoDB - помогите с запросом PHP - PullRequest
0 голосов
/ 08 июля 2010

У меня есть следующий объект, хранящийся в MongoDB:

[_id] => MongoId Object (
)
[horses] => Array (
    [0] => Array (
        [name] => Youve Been Mowed
        [selectionId] => 3004097
    )
    [1] => Array (
        [name] => Rascal In The Mix
        [selectionId] => 3460932
    )
    [2] => Array (
        [name] => Clumber Place
        [selectionId] => 2986884
    )
    [3] => Array (
        [name] => Pretty Orchid
        [selectionId] => 2581717
    )
    [4] => Array (
        [name] => Astrodonna
        [selectionId] => 2568095
    )
    [5] => Array (
        [name] => Just Sam
        [selectionId] => 2511403
    )
    [6] => Array (
        [name] => Many Welcomes
        [selectionId] => 2866423
    )
    [7] => Array (
        [name] => Two Turtle Doves
        [selectionId] => 3857873
    )
    [8] => Array (
        [name] => Piquante
        [selectionId] => 3372813
    )
    [9] => Array (
        [name] => Nimmys Special
        [selectionId] => 3066557
    )
)
[marketId] => 101531031
[marketName] => 7f Hcap

Теперь я хочу добавить новое поле:

[_id] => MongoId Object (
)
[horses] => Array (
    [0] => Array (
        [name] => Youve Been Mowed
        [selectionId] => 3004097
        [odds] => Array(
            10000000 => 1.5
            10000020 => 1.6
            10000030 => 1.7
        )
    )
    ...
    etc.
    ...

100000XX - это отметка времени, а 1.X - это шансы

Я действительно бьюсь головой об стол. Любые предложения высоко ценится.

Вот что у меня есть софар (не так):

foreach($horses as &$horse)
{
    $newdata=array('$set'=>array($horse['odds']=>$price));
    $filter=array("marketId"=>$marketId);
    $c->update($filter,$newdata);
}

Ответы [ 2 ]

0 голосов
/ 08 июля 2010

Большое спасибо за ваш ответ. Вы Кристина из модуля MongoDB Perl на CPAN? :)

Вот мой рабочий код:

        $data_object=null;
        for($i=0;$i<sizeof($horses);$i++)
        {
                $data_object->timestamp=$time;
                $data_object->niceTime=date("c");
                $data_object->price=$price;

                $this_horse=$horses[$i];
                if($this_horse['selectionId']==$horseId)
                {
                        $newdata=array('$push'=>array("horses.$i.odds"=>$data_object));
                        $filter=array();
                        $options=array('upsert'=>true);
                        $c->update($filter,$newdata,$options);
                }
        }
0 голосов
/ 08 июля 2010

Вам необходимо использовать точечную запись:

foreach($horses as &$horse)
{
    $newdata=array('$set'=>array('horses.odds'=> array($horses['odds'] => $price)));
    $filter=array("marketId"=> $marketId);
    $c->update($filter,$newdata);
}

См. http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...