3

私は約1週間Mongoで遊んでいますが、PHPを使用してMongoのネストされた配列を変更する方法をまだ理解できません。

これがサンプルドキュメントです...

array (
  '_id' => new MongoId("4cb30f560107ae9813000000"),
  'email' => 'mo@maurice-campobasso.com',
  'firstname' => 'Maurice',
  'lastname' => 'Campobasso',
  'password' => 'GOD',
  'productions' => 
  array (
    0 => 
    array (
      'title' => 'a',
      'date' => '1286811330.899',
    ),
    1 => 
    array (
      'title' => 'b',
      'date' => '1286811341.183',
    ),
    2 => 
    array (
      'title' => 'c',
      'date' => '1286811350.267',
    ),
    3 => 
    array (
      'title' => 'd',
      'date' => '1286811356.05',
    ),
  ),
)

私がしたくないのは、productions配列内の配列を削除することですが、その方法を理解することはできません。'update(' $ pull'=> ... etc)'で遊んでいますが、動作させることができませんでした。

4

2 に答える 2

4

OK、これを行うにはいくつかの方法があります。あなたの場合、私は次のようなことをします

mymongoobject.update( $unset : { "productions.2" : 1 } }

これは基本的に、プロダクションの「.2」要素を設定解除することを言っています。ここにいくつかのドキュメントがあります

これで $pull も機能するはずですが、「プロダクション」は実際には配列の配列 (またはサブオブジェクトを持つオブジェクト) であるため、少し難しくなります。したがって、配列を正確に一致させる必要があります。

mymongoobject.update( $pull : { "productions" : {'title':'d', 'date':'1286811356.05'} }

上記の場合、unset がおそらく最も簡単なオプションです (ただし、配列に「穴」が残ります)。

于 2010-10-11T17:01:13.643 に答える
1

これは実際には非常に簡単です。従来の SQL とは異なり、データ全体を変更して戻すだけです。

$cursor = $mongo->yourDB->yourCollection->findOne("_id",4cb30f560107ae9813000000);
//let's remove last item on productions
array_splice($cursor["productions"],2);
//and update the mongo document
echo $mongo->yourDB->yourCollection->update($cursor);
//it echoes 1 if successful

それが役に立てば幸い。

于 2010-10-11T16:58:56.720 に答える