MongoDB Query, обновить определенное поле, если значение не равно NULL - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть объект "input" , и он будет передан на запрос как параметр:

var input = {
    id: 1,
    componentId: x,
    commands: [...],
    user: [...],
}

И коллекция "testCollection" :

testCollection = {
    id: 1,
    model: {
        stepComponents: [
           {  
            componentId: x
            command: [...],
            user: [...],
           }
         ]
    }
}

Мой вопрос: как я могу обновить определенное поле в "testCollection" и пропустить обновление, если оно не определено или имеет значение null.Это означает, что если "input.user" не определено / пусто, тогда не обновлять "user" поле.

Пример запроса на обновление приведен ниже:

testCollection.update(
  {
    _id: objectId(input.id),
    'model.stepComponents.componentId': input.componentId
  },
  {
    'inputs': input.inputs,
    'model.stepComponents.$.commands': input.commands,
    'model.stepComponents.$.users': input.users,
  },
  { upsert: true },
);

Любая помощь будет оценена.Спасибо.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Вы можете попробовать использовать существует

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })
0 голосов
/ 30 ноября 2018

Я был поражен той же проблемой и решил следующее решение

  let params= {
      id: req.body.id, componentId: req.body.x, commands: req.body...,
  }

  ;
  for(let prop in params) if(!params[prop]) delete params[prop];//it will remove fields who are undefined or null 

  testCollection.findOneAndUpdate( {
      _id: req.params.id
  }

  , params);
0 голосов
/ 30 ноября 2018

Попробуйте это:

testCollection.update(
{
  _id: objectId(input.id),
  user: {$ne: null}
},
{
    $set: {input}
}

);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...