【问题标题】:MongoDB + PHP: How to push item to array with a spcecific key?MongoDB + PHP:如何使用特定键将项目推送到数组?
【发布时间】:2012-05-02 19:47:45
【问题描述】:

在 MongoDB-PHP 中,我使用以下示例代码将新条目推送到集合内数组的末尾...

$data = array(
        "domain"=>"superduperyoyo.com",
        "number"=>123,
        "week"=>5,
        "year"=>2012
);
$db->domains->save(
        array( 'someid' => $someid),
        array( '$push' => array( 'data' => $data ))
);

这会返回像 0,1,2,3...这样的键。 IE。

[someid] => somesupercoolid123
[data] => Array
    (
        [0] => Array
            (
                [domain] => superduperyoyo.com
                [number] => 123
                [week] => 5
                [year] => 2012
            )
        [1] => Array(...)
        [2] => Array(...)
    )

我想要做的是将 YearWeekNumber 存储为这样的键......

 [someid] => somesupercoolid123 
   [data] => Array
        (
            [201205123] => Array
                (
                    [domain] => superduperyoyo.com
                    [number] => 123
                    [week] => 5
                    [year] => 2012
                )
            [201206123] => Array(...)
            [201207123] => Array(...)
        )

如何将密钥与新条目一起保存/更新?我假设你不能使用 $push。您只使用 .save 或 .update 但如何传递密钥?

【问题讨论】:

    标签: php mongodb mongodb-query


    【解决方案1】:

    您可以使用$set

    $data = array(
            "domain"=>"superduperyoyo.com",
            "number"=>123,
            "week"=>5,
            "year"=>2012
    );
    $db->domains->update(
            array( 'someid' => $someid),
            array( '$set' => array( 'data' => array( 201205123 => $data )))
    );
    

    但我不建议这样做。最好使用“201205123”值设置另一个键,否则您将无法对该值进行范围查询或设置索引。

    【讨论】:

    • 我刚开始涉足 Mongo 并且正在尝试不同的模式。我会索引“数字”,“周”,“年”......关键只是在需要时明确提取个人记录,所以我没有重复。设置/保存将更新而不是再次插入。
    【解决方案2】:
    $data = array(
            "domain"=>"superduperyoyo.com",
            "number"=>123,
            "week"=>5,
            "year"=>2012
    );
    
     $update = array(
            '$push' => array('data.201205123'  =>  $data )
    );
    

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 1970-01-01
      • 2017-03-26
      • 2020-04-10
      • 2015-05-17
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多