Node.js 如何从mongoose文档中删除指定字段?

Node.js 如何从mongoose文档中删除指定字段?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我想从mongoose文档中动态删除一个字段 我尝试过的: 我正在使用 $unset 当我输入值时 "cars.BMW" 它起作用了。但当我想传递一个参数,它将是一个汽车品牌,然后取消设置它。我试过了 {$unset: {"cars."+brand: " "}} 但是加号是出乎意料的。点表示法不是这样工作的。在js中,可以使用括号表示法从字符串动态创建属性 exports.deleteBrand = function(req, res){ var brand = req.para

我想从mongoose文档中动态删除一个字段

我尝试过的: 我正在使用

$unset
当我输入值时

"cars.BMW"
它起作用了。但当我想传递一个参数,它将是一个汽车品牌,然后取消设置它。我试过了

{$unset: {"cars."+brand: " "}}

但是加号是出乎意料的。

点表示法不是这样工作的。在js中,可以使用括号表示法从字符串动态创建属性

exports.deleteBrand = function(req, res){ 
    var brand = req.params.brand;
    var query = {};
    query["cars." + brand] = "";
    Text.update(
        {key: req.params.key},
        {$unset: query},
        function(err){ if(err) res.send(err);
        res.json({message: "Car deleted!"}); 
    });
}
如果品牌为“bmw”,则此处的查询变量转换为:
{“cars.bmw”:“}


编辑:按op编辑以匹配方法。

点表示法不是这样工作的。在js中,可以使用括号表示法从字符串动态创建属性

exports.deleteBrand = function(req, res){ 
    var brand = req.params.brand;
    var query = {};
    query["cars." + brand] = "";
    Text.update(
        {key: req.params.key},
        {$unset: query},
        function(err){ if(err) res.send(err);
        res.json({message: "Car deleted!"}); 
    });
}
如果品牌为“bmw”,则此处的查询变量转换为:
{“cars.bmw”:“}


编辑:按op编辑以匹配方法。

您可以使用解构和模板文本:

{$unset: {[`cars.${brand}`]: " "}}

您可以使用分解结构和模板文字:

{$unset: {[`cars.${brand}`]: " "}}

您可以使用$unset删除feld,示例如下:

  User.findOneAndUpdate(
    {confirmationKey: req.params.key}, 
    {isConfirmed: true, $unset: { confirmationKey: ""}}, {}, (err, doc) => {

    if (err) {
      res.status(HttpStatus.BAD_REQUEST).send(StatusGen.getError(err))
    } else {
      console.log('user = ' + JSON.stringify(doc))
      res.send(StatusGen.getSuccess('confirmed'))
    }
  })

现在字段确认键被删除。

您可以使用$unset删除字段确认键,示例如下:

  User.findOneAndUpdate(
    {confirmationKey: req.params.key}, 
    {isConfirmed: true, $unset: { confirmationKey: ""}}, {}, (err, doc) => {

    if (err) {
      res.status(HttpStatus.BAD_REQUEST).send(StatusGen.getError(err))
    } else {
      console.log('user = ' + JSON.stringify(doc))
      res.send(StatusGen.getSuccess('confirmed'))
    }
  })

现在字段确认键被删除。

exports.deleteBrand=function(req,res){var brand=req.params.brand;Text.update({key:req.params.key},{$unset:{cars[brand]:“}},function(err){if(err)res send(err);res.json({message message:“Car deleted!”;})
这是我想用来删除特定品牌的功能。这里写着代币[出乎意料(汽车[品牌])@kirpt:你能发布一段数据吗?谢谢。我尝试了你的代码。它会发送一条消息,表明品牌已被删除,但它仍在数据库中。如果没有数据的可视化,很难说会发生什么和不会发生什么。在你的问题中发布一段数据,并给出一个请求参数“key”的示例,所以我可以进一步帮助您:)
exports.deleteBrand=function(req,res){var brand=req.params.brand;Text.update({key:req.params.key},{$unset:{cars[brand]:“”}},function(err){if(err)res.send(err);res.json({message:“Car deleted!”;})
这是我想用来删除某个特定品牌的功能。这里说的是代币[出乎意料(汽车[品牌])@kirpt:你能发布一段数据吗?谢谢。我尝试了你的代码。它会发送一条消息,表明品牌已被删除,但它仍在数据库中。如果没有数据的可视化,很难说会发生什么和不会发生什么。在你的问题中发布一段数据,并给出一个请求参数“key”的示例,因此我可以进一步帮助您:)