我有一个对象“输入” ,它将像参数一样传递给查询:
var input = {
id: 1,
componentId: x,
commands: [...],
user: [...],
}
和集合“ testCollection” :
testCollection = {
id: 1,
model: {
stepComponents: [
{
componentId: x
command: [...],
user: [...],
}
]
}
}
我的问题是如何更新“ testCollection” 上的特定字段,如果未定义或为空,则跳过该更新。 这意味着如果“ 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 },
);
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
我也遇到了同样的问题,并通过以下解决方案予以解决
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);
答案 1 :(得分:0)
尝试这个:
testCollection.update(
{
_id: objectId(input.id),
user: {$ne: null}
},
{
$set: {input}
}
);
答案 2 :(得分:0)
您可以尝试使用exists
db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })