2016-08-29 2 views
3

У меня есть данные в MongoDB, как показано нижеКак обновить элементы массива в MongoDB

{ 
    "_id": ObjectId("57c40e405e62b1f02c445ccc"), 
    "sharedPersonId": ObjectId("570dec75cf30bf4c09679deb"), 
    "notificationDetails": [ 
    { 
     "userId": "57443657ee5b5ccc30c4e6f8", 
     "userName": "Kevin", 
     "isRed": true 
    } 
    ] 
} 

Теперь я хочу, чтобы обновить isRed значение как false Как написать запрос для этого. Я пытался что-то вроде ниже

var updateIsRedField = function(db, callback) { 
    db.collection('notifications').update({_id:notificationId}, 
    { 
     $set: { "notificationDetails.$": {isRed: false}}, 
    }, function(err, results) { 
     callback(); 
    }); 
}; 

MongoClient.connect(config.database, function(err, db) { 
    assert.equal(null, err); 
    updateIsRedField(db, function() { 
     db.close(); 
    }); 
    return res.json({}); 
}); 
+0

Вы получили какие-либо ошибки при обновлении? Или это не обновляется? – Shrabanee

+0

Не обновляется. – Kevin

+0

Вы можете проверить вывод для 'db.collection ('уведомления'). Find ({_ id: notificationId})'? Он дает какие-либо записи или нет? – Shrabanee

ответ

2

С позиционных $ оператор действует как заполнитель для первого элемента, который соответствует документу запроса, а поле массива должно выглядеть как часть документа запроса, следовательно, запрос { "notificationDetails.isRed": true } имеет важное значение, чтобы получить $ оператору работать правильно:

db.collection('notifications').update(
    { "_id": notificationId, "notificationDetails.isRed": true }, 
    { "$set": { "notificationDetails.$.isRed": false } }, 
    function(err, results) { 
     callback(); 
    } 
); 
Смежные вопросы