suchen

Heim  >  Fragen und Antworten  >  Hauptteil

express - MongoDB 在更新记录时,如何验证某个值是否已存在

场景描述
当某条记录需要更新时,先查询这条记录的名称在集合Collection中是否已存在(排除本身)。

逻辑方向
Step 1:在集合中查找自己
Step 2:根据自己的名称在集合中查找
Step 3:判断 Step 1的_idStep 2的_id 是否匹配
Step 4:若两者_id不匹配,则提示“名称已存在”;反之,完成记录更新

现在遇到的问题是: Step 1的_idStep 2的_id 匹配不上。

附上我的代码

var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);

groups.findById(_qId,function (err,data) {
    if(err){
        res.json({code: 404, msg: "Error"});
    }else{
        groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
            console.log(data["_id"] == _data["_id"]);
        });
    }
});

可能是我的思路有问题,也可能是我的代码有问题,要请各路高手指点...

淡淡烟草味淡淡烟草味2754 Tage vor684

Antworte allen(3)Ich werde antworten

  • 世界只因有你

    世界只因有你2017-05-02 09:24:58

    我来整理一下你的代码,说实在的我非常不喜欢你这种代码风格,因为各种不必要的变量声明导致代码表意很差

    首先我假设你使用的是express,因为你使用req.body

    //这个定义是为了什么?是为了防止你老板炒了你所以把代码写的别人看不懂吗?
    //var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);
    
    groups.findById(req.body._id, function (err, docById) {
        if(err){
            res.json({code: 404, msg: "Error"});
        }else{
            groups.findOne({name:req.body.name}, null)
                .exec(function (_err, docByName) {
                   console.log(docById._id == docByName._id);
                });
        }
    });
    

    也就是说你某一个post一类的请求中传来两个数值,一个是_id,一个是name,你用两个值分别对数据库里做搜索,于是获得了两个搜索结果(两个doc),然后你尝试比较通过_id搜索获得的doc和通过name搜索的doc是不是同一个东西(比较_id当然就是比较是不是同一个doc了啊)

    基于你给出的条件,我首先猜测你给的这个req.body里面的_id和name是不是匹配的,也许他们本来就来自两个不同的doc?又或者你的数据库中确实存在两个有同样name的doc,那么现在通过name搜索获得的doc和通过id搜索获得doc就不是同一个?

    你可以尝试在最后的console.log之前首先打印一下docById和docByName,并且把你的mongoose scheme贴出来看一下,这样子我们起码知道你在搜索一个什么样的数据库

    Antwort
    0
  • 滿天的星座

    滿天的星座2017-05-02 09:24:58

     groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
                console.log(data["_id"] == _data["_id"]);
            });

    这个使用的是findOne,只会返回一个记录,也许库里面有多个name相同的值吧,你取出来的一个正好是和你想要的不是一个

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-02 09:24:58

    已经找到方法:将Step 1得到的_id,用String()转化。

    完整代码

    var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);
    
    groups.findById(_qId,function (err,data) {
        if(err){
            res.json({code: 404, msg: "Error"});
        }else{
            groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
                console.log(String(data["_id"]) == _data["_id"]);
            });
        }
    });

    Antwort
    0
  • StornierenAntwort