반응형
$ or 조건이있는 Mongoose의 찾기 방법이 제대로 작동하지 않습니다.
최근 Nodejs에서 Mongoose와 함께 MongoDB를 사용하기 시작했습니다.
$or
조건 및 _id
필드 와 함께 Model.find 메서드를 사용하면 Mongoose가 제대로 작동하지 않습니다.
작동하지 않습니다.
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
그건 그렇고, '_id'부분을 제거하면 작동합니다!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
그리고 MongoDB 셸에서는 둘 다 제대로 작동합니다.
인터넷 검색을 통해 해결했습니다.
var ObjectId = require('mongoose').Types.ObjectId;
var objId = new ObjectId( (param.length < 12) ? "123456789012" : param );
// You should make string 'param' as ObjectId type. To avoid exception,
// the 'param' must consist of more than 12 characters.
User.find( { $or:[ {'_id':objId}, {'name':param}, {'nickname':param} ]},
function(err,docs){
if(!err) res.send(docs);
});
나는 모든 사람들에게 Mongoose의 쿼리 작성기 언어와 콜백 대신 약속을 사용하기를 간청합니다.
User.find().or([{ name: param }, { nickname: param }])
.then(users => { /*logic here*/ })
.catch(error => { /*error logic here*/ })
몽구스 쿼리 에 대해 자세히 알아보십시오 .
mongoDB 문서에 따르면 : "... 즉, MongoDB가 색인을 사용하여 $ or 표현식을 평가하려면 $ or 표현식의 모든 절이 색인에서 지원되어야합니다."
따라서 다른 필드에 대한 색인을 추가하면 작동합니다. 나는 비슷한 문제가 있었고 이것이 해결되었습니다.
https://docs.mongodb.com/manual/reference/operator/query/or/에서 자세한 내용을 읽을 수 있습니다.
반응형
'Programing' 카테고리의 다른 글
.width ()에서 반환 된 값을 반올림하지 않도록 jQuery를 만드는 방법은 무엇입니까? (0) | 2020.09.03 |
---|---|
ReSharper-한 줄 주위에 중괄호 사용 (0) | 2020.09.03 |
렌더링 중 예외 발생 : 모드 0을 찾을 수 없습니다. (0) | 2020.09.03 |
C #에서 참조 유형과 값 유형의 차이점은 무엇입니까? (0) | 2020.09.03 |
AND 및 OR 연산자를 사용하여 속성별로 jQuery 선택 (0) | 2020.09.03 |