MongoDB ассоциативный массив - тянуть можно? - PullRequest
2 голосов
/ 12 декабря 2011

Имея следующий массив:

array(
      'id' => 12,
      'keys' => array('x1' => array('idx' => 12, 'text'=> '1123145'),
                      'x2' => array('idx' => 14, 'text'=> '1123142'),
                      'x3' => array('idx' => 12, 'text'=> '1123145'),
                      'x4' => array('idx' => 14, 'text'=> '1123145')
                      )
     )

Я хочу получить все ключи с помощью idx 12. Поэтому я делаю следующее:

$mdb->db->collection->update(array('id' => 12), array('$pull' => array('keys' => array('idx' => 12))));

Но это не работает, в чем проблема?

1 Ответ

0 голосов
/ 12 декабря 2011

Это невозможно сделать с этой схемой. Вы пытаетесь извлечь id = 12 из ключа массива, но проблема в том, что каждый элемент ключа является объектом сам по себе.

единственный способ сделать то, что вы хотите с минимальными изменениями, это изменить схему следующим образом:

{
  "_id" : 12,
  "keys" : [
      {
        "type" : 'x1',
        "idx" : 12,
        "text" : "1111"
      },
      {
        "type" : 'x2',
        "idx" : 14,
        "text" : "1111"
      },
      {
        "type" : 'x3',
        "idx" : 12,
        "text" : "1111"
      },
      {
        "type" : 'x4',
        "idx" : 14,
        "text" : "1111"
      }
    }]
}

, чем вы можете выполнить свой запрос следующим образом:

db.XXX.update(
{ "_id" : 12},
{
  '$pull' : {
     'keys' : {
    'idx' : 12
     }
  }
}
);

Надеюсь, вы сможете перенести это в php с массивами, потому что мне кажется, что вы используете php для запросов

...