찾다

 >  Q&A  >  본문

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일 전686

모든 응답(3)나는 대답할 것이다

  • 世界只因有你

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

    당신의 코드를 정리하겠습니다. 솔직히 당신의 코딩 스타일은 별로 마음에 들지 않습니다. 온갖 불필요한 변수 선언으로 인해 코드 표현이 좋지 않기 때문입니다

    먼저 req.body를 사용하므로 express를 사용한다고 가정합니다

    으아악

    즉, 게시물 요청에 두 개의 값이 전달됩니다. 하나는 _id이고 다른 하나는 이름입니다. 두 값을 사용하여 각각 데이터베이스를 검색하므로 두 개의 검색 결과( 두 개의 문서), 그리고 _id 검색을 통해 얻은 문서와 이름으로 검색한 문서가 동일한지 비교하려고 합니다(물론 _id를 비교하는 것은 동일한 문서인지 비교하는 것입니다)

    귀하가 제공한 조건을 토대로 먼저 귀하가 제공한 req.body의 _id와 이름이 서로 다른 두 문서에서 나온 것인지 추측했습니다. 아니면 데이터베이스에 동일한 이름을 가진 두 개의 문서가 있어서 이름 검색을 통해 얻은 문서와 ID 검색을 통해 얻은 문서가 동일하지 않을 수도 있습니다.

    최종 console.log 전에 docById 및 docByName을 인쇄하고 몽구스 구성표를 게시하여 살펴볼 수 있습니다. 이렇게 하면 최소한 어떤 종류의 데이터베이스를 검색하고 있는지 알 수 있습니다.

    회신하다
    0
  • 滿天的星座

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

    으아악

    이것은 하나의 레코드만 반환하는 findOne을 사용합니다. 아마도 라이브러리에 동일한 이름을 가진 값이 여러 개 있고, 가져온 값이 원하는 값과 다를 수 있습니다.

    회신하다
    0
  • 怪我咯

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

    방법을 찾았습니다. String()을 사용하여 1단계에서 얻은 _id를 변환합니다.

    전체 코드

    으아아아

    회신하다
    0
  • 취소회신하다