복붙노트

[MONGODB] $ 또는 조건 몽구스의 찾기 방법은 제대로 작동하지 않습니다

MONGODB

$ 또는 조건 몽구스의 찾기 방법은 제대로 작동하지 않습니다

최근에 나는 Nodejs에 몽구스와 MongoDB를 사용하기 시작.

나는 $ 또는 조건과 _id 필드 Model.find 방법을 사용하는 경우, 몽구스가 제대로 작동하지 않습니다.

이 작동하지 않습니다

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의 쉘에서 모두 작업이 제대로.

해결법

  1. ==============================

    1.나는 인터넷 검색을 통해 해결 :

    나는 인터넷 검색을 통해 해결 :

    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);
    });
    
  2. ==============================

    2.나는 모두가 콜백 대신 몽구스의 쿼리 빌더 언어와 약속을 사용 간청 :

    나는 모두가 콜백 대신 몽구스의 쿼리 빌더 언어와 약속을 사용 간청 :

    User.find().or([{ name: param }, { nickname: param }])
        .then(users => { /*logic here*/ })
        .catch(error => { /*error logic here*/ })
    

    몽구스 쿼리에 대한 자세한 읽어보십시오.

  3. ==============================

    3.MongoDB의 문서에 따르면 : "... 그 MongoDB를위한 사용 인덱스로, 인 것은 $ 또는 식의 $ 또는 식 인덱스 지원해야합니다 모든 조항을 평가합니다."

    MongoDB의 문서에 따르면 : "... 그 MongoDB를위한 사용 인덱스로, 인 것은 $ 또는 식의 $ 또는 식 인덱스 지원해야합니다 모든 조항을 평가합니다."

    그래서 다른 필드에 인덱스를 추가하고 작동합니다. 나는 비슷한 문제를 가지고이 그것을 해결했다.

    당신은 더 여기 읽을 수 있습니다 : https://docs.mongodb.com/manual/reference/operator/query/or/

  4. from https://stackoverflow.com/questions/7382207/mongooses-find-method-with-or-condition-does-not-work-properly by cc-by-sa and MIT license