Обновить значение использовать $ каждый в монго

Мне нужно обновить все увиденное значение от 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 ответ

Позиционный $ Оператор, который вы пытаетесь использовать, обновит только первый элемент, который соответствует стороне запроса вашего оператора обновления. Это в настоящее время разработано и упоминается в документации.

Чтобы обновить несколько позиций, вы должны либо:

  1. Выполняйте несколько операторов обновления для документа, пока измененный счетчик не будет возвращен как 0.

  2. Получить документ и изменить каждый элемент массива, чтобы установить новое значение.

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

Другие вопросы по тегам