如何在单个查询中仅删除MongoDB中具有空值的行

3

我有一个名为test的集合,其中有一条记录:

[{ number:"1524",
name:null,
cat_id:"126842"},
{number:"456",
name:null,
cat_id:null }]

如何删除包含空值的整行:

[{ number:"1524",
 cat_id:"126842" },
{ number:"456"}]


我尝试过这个,但整个记录都被删除了,而不仅仅是行。
collection.deleteMany( { $or: [{cat_id : null },{ name : null }]


需要在一次查询中删除多个变量。 MongoDB版本4.0。
1个回答

2
在MongoDB中,$unset运算符用于删除特定字段。你可以尝试使用以下命令来删除空字段。
collection.updateMany({name: null}, { $unset : { name : 1 }})

该命令将从所有名称为null的文档中删除name字段。您也可以使用类似的命令来处理cat_id。
编辑:根据我在另一个问题中收到的答案,您还可以使用以下方式在单个命令中完成相同操作。
collection.updateMany({
  $or : [{
    name : null
  }, {
    cat_id : null
  }]
}, [{
  $set: {
    name : { $ifNull : ["$hobby", "$$REMOVE"] },
    cat_id : { $ifNull : ["$Roll_no", "$$REMOVE"] }
  }
}]
);

然而,这只能在MongoDb V4.2及以上版本中完成。您还可以查看此链接了解另一种方法。希望对您有所帮助!

我们能在单个数据库调用中完成吗? - user12983086
1
我本来想在回答中提到它,但是我并不完全确定。 - Abhishek Bhagate
我们可以尝试使用$or吗? - user12983086
@sigmoidnuetron 我们不能以同样的方式使用它。请检查我所做的修改,看看是否有帮助。 - Abhishek Bhagate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接