Обновить значение использовать $ каждый в монго
Мне нужно обновить все увиденное значение от 0 до 1, используя Монго и PHP как массив
enter code herearray (
'_id' => new MongoId("5357c023dd34bcc9298b456e"),
'_type' =>
array (
'0' => 'Altibbi_Mongo_MemberNotification',
),
'member_id' => '53068',
'notification_count' => new MongoInt32(30),
'notifications' =>
array (
'0' =>
array (
'actor_id' => '0',
'notification_type' => 'badge_top',
'date_added' => '2014-04-23 16:29:07',
'seen' => '0',
),
'1' =>
array (
'actor_id' => '0',
'notification_type' => 'badge_country',
'date_added' => '2014-04-24 08:32:55',
'seen' => '1',
)
),
)
Мне нужна помощь, чтобы решить проблему, я использую $ it, обновляю только одно первое значение, я использую $ каждый, и это не работает вообще
1 ответ
Позиционный $
Оператор, который вы пытаетесь использовать, обновит только первый элемент, который соответствует стороне запроса вашего оператора обновления. Это в настоящее время разработано и упоминается в документации.
Чтобы обновить несколько позиций, вы должны либо:
Выполняйте несколько операторов обновления для документа, пока измененный счетчик не будет возвращен как 0.
Получить документ и изменить каждый элемент массива, чтобы установить новое значение.
Типичный пример кодирования 2-го подхода следующий:
var doc = db.collection.findOne({ "member_id": "53068" })
for ( var x = 0; x < doc.notifications.length; x++ ) {
if ( doc.notifications[x].seen == 0 ) {
var obj = {};
obj["notifications." + x] = 1;
db.collection.update(
{ "member_id": "53068" },
{ "$set": obj }
);
}
}
$each
Оператор, на который вы ссылаетесь, предназначен для указания нескольких элементов массива для использования с другими операторами, такими как $push
а также $addToSet
которые здесь не применяются, так как это касается создания новых элементов.