0

我有一个 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是一个数组,但我认为标准不正确。

任何帮助,将不胜感激。

4

3 回答 3

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 ] }

有用 :)

另外,请注意值类型(hhid和中的值seg)。如果要存储或查找int值,请不要用双引号将值括起来。

于 2012-10-25T05:06:06.337 回答
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")));
于 2012-10-24T08:04:17.870 回答
0

我看到您用单引号将变量括起来;这样 PHP 将按字面意思解释它。尝试从'$addToSet'.

于 2012-10-24T06:51:15.383 回答