匹配一个字段而忽略其他字段

时间:2018-12-07 07:35:02

标签: node.js mongodb mongoose

我有这样的数据:

  {"_id":"5c0a17013d8ca91bf4ee7885",
    "ep1":{
        "email":"test@gmail.com",
        "password":"123456",
        "phoneNo":"123456789",
        "endpointId":"ep1"
        }
  }

我想匹配所有具有键 ep1 和值“ email”:“ test@gmail.com” 的对象,并设置 ep1:{}

代码:

  

我的req对象是这样的{“ endpointId”:“ ep1”,“ email”:   “ test@gmail.com”}

    let query = {[req.body.endpointId]:{email: req.body.email}};
        endpointModelData.endpoint.updateMany(query, {[req.body.endpointId]:{}}, {multi: true}, function(err, doc){
            if (err) return res.send(500, { error: err });
            console.log(doc)
            return res.status(201).send("success.");
        })

但是,只有在我的 ep1 对象

中只有一个条目(即电子邮件)时,此代码才有效

像这样:

{"_id":"5c0a17013d8ca91bf4ee7885",
    "ep1":{
        "email":"test@gmail.com"
        }
  }

那么,如何匹配电子邮件并忽略其他字段?

1 个答案:

答案 0 :(得分:2)

您需要匹配:{"ep1.email":"test@gmail.com"},因此将query更改为:

let query = { [`${req.body.endpointId}.email`]: req.body.email };

您可以看到filter working here

一天结束时,您的更新应如下所示:

updateMany({ "ep1.email" : "test@gmail.com" }, { "ep1": {} }, {multi: true})