좋아, 그래서 Mongoose를 사용하는 MEAN.js로 프로젝트를 설정했습니다.Mongoose의 쿼리도 _id 필드와 함께 작동하지 않습니다.
전자 메일 또는 displayName 필드가 정규식과 일치하고 _id가 특정 ID 집합과 일치하지 않는 MongoDB의 모든 사용자를 검색하려고합니다.
여기서 내가 뭘 쿼리의 :
var re = new RegExp(req.body.pattern, 'i');
var memberIDs = '';
req.body.members.forEach(function(member){ //members have a user field which is an ObjectID
memberIDs += (member.user + ' ');
});
memberIDs += req.user._id;
User.find().or([{ 'displayName': { $regex: re }},
{ 'email': { $regex: re }}])
.nor([{'_id' : memberIDs}])
.select('displayName email')
.exec(function(err, users) {
if(err){
res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
}else{
res.json(users);
}
});
};
이 작동하지 않습니다와 나는 오류를 얻을 메시지는 그냥 빈 문자열입니다. 쿼리가 .nor() 메서드없이 제대로 작동합니다. 이런 _id 필드를 사용할 수 없습니까?
정말 고마워요, 매력처럼 작동합니다! – tiansivive
이전 메모를 편집 할 수 없었습니다. 내가 공백으로 구분 된 문자열을 사용하는 이유는 그것이 몽유병 문서가 nor 연산자에 대해 말한 것이기 때문입니다. 당신이 다른 배경에서 왔다고 말하는 것이 맞지만, 내가 그런 식으로 쿼리 객체를 만들 수 있다는 것을 알았 더라면 아마도 그랬을 것입니다. 아마도 MongoDB와 Mongoose의 신참이기 때문일 것입니다. 나는 $ nin 연산자에 대해서도 몰랐다. 몽구스 문서는 도우미 메서드를 많이 사용합니다. 왜 내가 그들을 사용하지 않는 것이 더 좋은지 이유가 무엇입니까? – tiansivive
@lokias 이것은 답변에서 내용을 읽으면서 말한 것입니다. 이는 인수가 "공백으로 구분 된 문자열"로 또는 객체 표기법에서 제공된대로 잘못 해석 한 것에서 비롯됩니다. 위의 모든 것을 적어두면, mongoose가 객체 형식 인 {{ "displayName": 1, "email": 1}'이 아니라 "string"을 해석 할 때 쿼리 문의 "field selection" 그것을 해석합니다. 이것은 목록을 시작하는 기준과 동일하지 않습니다. 즉 "_id": "1 2 3 4 5 6 7"을 7 개의 개별 값으로 사용합니다. 그건 틀렸어. 그래서 네가 잘못 됐어. –