MongoDB устанавливает ключ в каждом объекте массива - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу убедиться, что только ОДИН элемент в массиве помечен как "текущий".Поэтому я думаю, что если входящие данные помечены как «current = true», то я хочу изменить ВСЕ другие элементы на «current = false».

данные выглядят так:

{
    _id:123,
    name:"bob jones",
    schools:[
        {
          name: "central HS",
          current: false
        },
        {
           name: "east side HS",
           current: true
        }
    ]
}

Так что, если бы я добавил школу - я хотел бы убедиться, что существующие школы были помечены как текущие: false - ТОЛЬКО если входящая школа была помечена как текущая: true.

входящий объект выглядит следующим образом:

{
    name: "Discipline Military Academy HS",
    current: true
}

Вот код, который я пытаюсь использовать.Я не получаю ошибку - но существующие школы с current = true остаются, без изменений.Таким образом, похоже, что он НЕ работает

ПРИМЕЧАНИЕ. Переданный идентификатор - это _id этого человека (_id: 123)

module.exports.addSchool = function( id, data, callback ) {

    // reset all the other "currents" to false (only ONE current school permitted)
    if ( typeof data.current != 'undefined' && data.current === true ) {
        // NOTE:  a console.log('here'); shows I'm getting past the conditional... 
        User.update( {_id: id}, {$set: {'schools.0.current': false}} );
    }

    User.findByIdAndUpdate( id, { 
        $addToSet: {
            "schools": data
        }
    }, {new: true}, callback );

}

Любые предложения?

ПРИМЕЧАНИЕ.используя mongoose 5.2.13 для подключения моего экспресс-приложения к mongoDB, и я получаю это предупреждение - (узел: 14508) DeprecationWarning: collection.findAndModify устарела.Вместо этого используйте findOneAndUpdate, findOneAndReplace или findOneAndDelete.

Но я не использую "findAndModify" - так что я не думаю, что это применимо, хотя мне любопытно, почему он отображает.

1 Ответ

0 голосов
/ 18 сентября 2018

Для обновления current : true до current:false

Пожалуйста, измените запрос.

 db.getCollection('user').update( {
    "_id" : id,
    "schools.current": true }, 
    {$set: {'schools.$.current': false}});
...