2014-09-01 4 views
0

나는 다른 게시물을 보았으나 아무도 내가하려고하는 것을 다루지 않는 것 같다. 배열에 type_ids가있는 모든 레코드를 검색하고 현재 로그인 한 사용자에게 속하는 쿼리를 만들어야합니다. 여기에 내가 가진 무엇 :여러 조건을 사용하여 문서를 찾는 방법은 무엇입니까?

검색어 :

app.post('/photos', function(req, res) { 
    Photos 
     .find({ 
      'type_id': { $in: req.body.type_ids }, 
      $and : {'groups.users': { $in: req.user._id }} 
     }) 
     .select('name size') 
     .exec(function(err, data) { 
      return res.json(data); 
     }); 
}); 

스키마 :

var photoSchema = mongoose.Schema({ 
    name : String, 
    size : String, 
    type_id : String, 
    created : { 
     type: Date, 
     default: Date.now 
    }, 
    groups : { 
     users : [], 
     other : [] 
    } 
}); 

내가 일을 얻을 수있는 유일한 것은 다음과 같은 쿼리입니다 :

app.post('/photos', function(req, res) { 
    Photos 
     .find({'type_id': { $in: req.body.type_ids }}) 
     .select('name size') 
     .exec(function(err, data) { 
      return res.json(data); 
     }); 
}); 

하지만은, 분명히 이것은 특정 사용자에 대한 결과 만 필요하기 때문에 작동하지 않습니다. 라인 $and : {'groups.users': { $in: req.user._id }} 분명히 작동하지 않습니다,하지만 난 그것을 고칠 방법을 잘 모르겠습니다. 어떤 아이디어?

답변

1

"and"연산자는 쿼리에 포함되므로 $and은 거의 필요하지 않습니다. 당신은 사용할 수 있습니다 : 변수의 이름에 따라

하지만
{ 
    'type_id': { $in: req.body.type_ids }, 
    'groups.users': { $in: req.user._id } 
} 

가, 두 번째 줄은 잘못된 소리 - 당신은 아마 'groups.users': req.user._id (당신이 $in을 삭제해야)합니다.

{ 
    '$and': [ 
     { 'type_id': { $in: req.body.type_ids } }, 
     { 'groups.users': { $in: req.user._id } } 
    ] 
} 

그러나 나는 여기의 불필요한 말했다처럼 :

마지막으로, $and를 사용하는 방법은 그것을 배열을 제공하는 것입니다.

+0

감사합니다.하지만 여전히 작동하지 않습니다. 나는''groups.users ': {$ in : req.user._id}''와''groups.users': req.user._id''를 시도했지만 어느 쪽도 효과가 없었습니다. 쿼리에서이 줄을 제거하면 데이터를 다시 얻습니다. 단지'user._id'에 의해 필터링되지 않습니다. –

+1

수행하려는 작업에 대한 의심을 제거하려면 수행하려는 쿼리 종류의 특정 예와 일치하거나 일치하지 않는 실제 샘플 문서를 제공 할 수 있습니까? – wdberkeley

+0

@ChrisPaterson'req.user._id' 변수가 예상했던 것과 다르다고 들립니다. –

관련 문제