MongoDb Обновить только одно значение из массива

У меня есть коллекция в 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]);

Как я должен это делать.??

3

Решение

То, что вы хотите сделать, это либо изменить свою схему как пару {ключ: значение}, а затем следуйте этому руководство, это поможет вам разобраться в вашей проблеме. ИЛИ ЖЕ Вы можете получить все значения из цветового массива и заменить их новым значением, а затем обновить ваш документ (я бы не стал этого делать, потому что это грязный подход!).

РЕДАКТИРОВАТЬ

Привет, приятель! Я основал это на документах 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'));
3

Другие решения

Вам нужно использовать $set оператор. Не уверен, как это делается в Jessenger Mongodb, но это может быть что-то вроде:

$query->where($field,'regexp','/^('.$id.')_.*/')
->update(['$set' => [ $field=>$id.'_'.$name]]);
0

Почему бы не изменить ваши данные следующим образом:

"_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.

0
По вопросам рекламы [email protected]