У меня есть коллекция в MongoDB который выглядит так
"_id" : ObjectId("554c5397ccfff21e103c9869"),
"name" : "test",
"color" : [
"552ced22ccfff2d8183c986a_Jellow",
"551fdd24ccfff2362e3c9869_test"],
"updated_at" : ISODate("2015-05-08T06:11:35.303Z"),
"created_at" : ISODate("2015-05-08T06:11:35.303Z")
Я хочу обновить только одно значение в массиве цвет Но когда я пытаюсь обновить массив, он удаляет все значения из цветового массива и заменяет его новым значением.
Вот код (Я ИСПОЛЬЗУЮ ПАКЕТ JESSENGER MONGODB ДЛЯ LARAVEL)
$query->where($field,'regexp','/^('.$id.')_.*/')->update([$field=>$id.'_'.$name]);
Как я должен это делать.??
То, что вы хотите сделать, это либо изменить свою схему как пару {ключ: значение}, а затем следуйте этому руководство, это поможет вам разобраться в вашей проблеме. ИЛИ ЖЕ Вы можете получить все значения из цветового массива и заменить их новым значением, а затем обновить ваш документ (я бы не стал этого делать, потому что это грязный подход!).
РЕДАКТИРОВАТЬ
Привет, приятель! Я основал это на документах jenssenger:
Добавить элементы в массив.
DB::collection('users')->where('name', 'John')->push('items', 'boots');
DB::collection('users')->where('name', 'John')->push('messages', array('from' => 'Jane Doe', 'message' => 'Hi John'));
Если вы не хотите дублировать элементы, установите для третьего параметра значение true:
DB::collection('users')->where('name', 'John')->push('items', 'boots', true);
Удалить элемент из массива.
DB::collection('users')->where('name', 'John')->pull('items', 'boots');
DB::collection('users')->where('name', 'John')->pull('messages', array('from' => 'Jane Doe', 'message' => 'Hi John'));
Вам нужно использовать $set
оператор. Не уверен, как это делается в Jessenger Mongodb, но это может быть что-то вроде:
$query->where($field,'regexp','/^('.$id.')_.*/')
->update(['$set' => [ $field=>$id.'_'.$name]]);
Почему бы не изменить ваши данные следующим образом:
"_id" : ObjectId("554c5397ccfff21e103c9869"),
"name" : "test",
"color" : [
{ "id":"552ced22ccfff2d8183c986a", "name":"Jellow"},
{ "id":"551fdd24ccfff2362e3c9869", "name":"test"}
],
"updated_at" : ISODate("2015-05-08T06:11:35.303Z"),
"created_at" : ISODate("2015-05-08T06:11:35.303Z")
тогда вы можете обновить элемент по id.