场景描述
当某条记录需要更新时,先查询这条记录的名称在集合Collection
中是否已存在(排除本身)。
逻辑方向
Step 1:在集合中查找自己
Step 2:根据自己的名称在集合中查找
Step 3:判断 Step 1的_id
与 Step 2的_id
是否匹配
Step 4:若两者_id不匹配,则提示“名称已存在”;反之,完成记录更新
现在遇到的问题是: Step 1的_id
与 Step 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"]);
});
}
});
可能是我的思路有问题,也可能是我的代码有问题,要请各路高手指点...
世界只因有你2017-05-02 09:24:58
당신의 코드를 정리하겠습니다. 솔직히 당신의 코딩 스타일은 별로 마음에 들지 않습니다. 온갖 불필요한 변수 선언으로 인해 코드 표현이 좋지 않기 때문입니다
먼저 req.body를 사용하므로 express를 사용한다고 가정합니다
으아악즉, 게시물 요청에 두 개의 값이 전달됩니다. 하나는 _id이고 다른 하나는 이름입니다. 두 값을 사용하여 각각 데이터베이스를 검색하므로 두 개의 검색 결과( 두 개의 문서), 그리고 _id 검색을 통해 얻은 문서와 이름으로 검색한 문서가 동일한지 비교하려고 합니다(물론 _id를 비교하는 것은 동일한 문서인지 비교하는 것입니다)
귀하가 제공한 조건을 토대로 먼저 귀하가 제공한 req.body의 _id와 이름이 서로 다른 두 문서에서 나온 것인지 추측했습니다. 아니면 데이터베이스에 동일한 이름을 가진 두 개의 문서가 있어서 이름 검색을 통해 얻은 문서와 ID 검색을 통해 얻은 문서가 동일하지 않을 수도 있습니다.
최종 console.log 전에 docById 및 docByName을 인쇄하고 몽구스 구성표를 게시하여 살펴볼 수 있습니다. 이렇게 하면 최소한 어떤 종류의 데이터베이스를 검색하고 있는지 알 수 있습니다.
滿天的星座2017-05-02 09:24:58
으아악
이것은 하나의 레코드만 반환하는 findOne을 사용합니다. 아마도 라이브러리에 동일한 이름을 가진 값이 여러 개 있고, 가져온 값이 원하는 값과 다를 수 있습니다.