Это невозможно сделать с этой схемой.
Вы пытаетесь извлечь 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 для запросов