Ошибка обновления массива в Mongo
Вопрос
Я создал массив в моем документе Mongo, поэтому он выглядит немного похоже на следующее:
{ "_id" : ObjectId("4f59e19d0b7aab2903000004"),
"details" : { x:1, y:2 }
}
.
Я тогда пытаюсь выдвинуть новое значение на массив, делая:
db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{$push: {"details": {"z":3}}});
.
Однако я получаю ошибку:
Cannot apply $push/$pushAll modifier to non-array
.
Кажется, единственный способ, которым я на самом деле могу добавить информацию в массив, это использовать точечную обозначение, чтобы добавить его, например, e.g.
db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{"details.z": 3});
.
, который, кажется, работает, но когда у меня есть массив около 30 значений, это кажется немного утомительным.
Просто для ясности, я использую Framework PHP литий, не только вводя в эти вручную, поэтому я мог бы попереться на массиве, чтобы получить «детали».К каждому ключу, но я не думаю, что это должно быть необходимо.Есть ли что-то, чего мне не хватает, почему он не будет толкать значения в массив?
(мой код лития был следующим :)
User::update(array('$push'=>array('details'=>array('z'=>3))), array('_id'=>$id))
.
Спасибо,
Дэн
Решение
"Детали" - это встроенный документ, а не массив.Если это был массив, он будет выглядеть так (обратите внимание на [], указывающее на массив):
{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"),
"details" : [ { "x" : 1 }, { "y" : 2 } ] }
.
Если вы тогда сделаете $ push:
db.users.update({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")},
{$push : {"details": {"z":3}}})
.
Вы получаете ожидаемый результат:
db.users.find({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")})
{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"),
"details" : [ { "x" : 1 }, { "y" : 2 }, { "z" : 3 } ] }
.
в основном вы пытаетесь нажать в документ, а не массив.