如何使用mongodb和PHP更新数组

时间:2012-10-24 06:44:43

标签: php mongodb

我有一个mongo文档,例如:

{
  ["_id"]=>
  object(MongoId)#7 (1) {
  ["$id"]=>
  string(24) "506f54886801cae34212c1a2"
  }
  ["hhid"]=>
  array(2) {
    [0]=>
    int(210854544)
   [1]=>
   int(308789420)
 }
 ["seg"]=>
 array(4) {
   [0]=>
   int(71)
    [1]=>
    int(91)
    [2]=>
    int(35)
    [3]=>
    int(64)
  }
}

我想要做的是更新seg数组(添加另一个条目),其中hhid具有特定元素。

我试过了:

$collection->update(
    array('hhid' => '226304795'),
    array('$addToSet' => array("seg" => "8")));

期望seg数组现在具有:

["seg"]=>
  array(5) {
    [0]=>
    int(71)
    [1]=>
    int(91)
    [2]=>
    int(35)
    [3]=>
    int(64)
    [4]=>
    int(8)
 }

然而没有任何反应。我理解hhid是一个数组,但我不认为标准是正确的。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

我看到你用一个引号括起一个变量;这样PHP就可以从字面上解释它。请尝试从'$addToSet'删除单引号。

答案 1 :(得分:0)

我相信您正在string进行搜索,因为您希望按int进行搜索,因为您的文档显示:

["hhid"]=>
  array(2) {
      [0]=>int(210854544)
      [1]=>int(308789420)
  }

MongoDB不知道你的类型(除非使用BSON类型但是不会像SQL那样转换)并且它不像PHP那样松散类型,因此在int字段上搜索字符串将不起作用。请尝试改为:

$collection->update(
    array('hhid' => 226304795),
    array('$addToSet' => array("seg" => "8")));

答案 2 :(得分:0)

??? 226304795数组中没有hhid,对吧?

所以你找不到要更新的东西。

这是我的测试数据:

{ "_id" : ObjectId("5088c3396c27125921108707"), "hhid" : [ 210854544, 308789420 ], "seg" : [ 71, 91, 35, 64 ] }

我的代码:

$m = new Mongo('mongodb://localhost:27017');
$db = $m->test;
$test = $db->test;
$test->update(array('hhid'=>210854544), array('$addToSet' => array('seg' => 8)));

我的结果:

{ "_id" : ObjectId("5088c6fa6c27125921108708"), "hhid" : [ 210854544, 308789420 ], "seg" : [ 71, 91, 35, 64, 8 ] }

有效:)

另外,请注意值类型(hhidseg中的值)。如果要存储或查找int值,请勿使用双引号括起值。