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

ドキュメントが示すように、実際に検索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 に答える
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 に答える