2014-09-01 2 views
0

Я просмотрел другие сообщения, и никто, кажется, не обращается к тому, что я пытаюсь сделать. Мне нужно создать запрос, который будет искать все записи, имеющие тип_имя в массиве, и принадлежать текущему зарегистрированному пользователю. Вот что у меня есть:Как найти документы, используя несколько условий?

Запрос:

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 редко необходим. Вы можете просто использовать:

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

Хотя, на основе имени переменной, вторая строка звучит так - вы, вероятно, хотите просто 'groups.users': req.user._id (вы должны упасть $in).

Наконец, способ использования $and, давая ему массив:

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

Но, как я уже говорил, его ненужно здесь.

+0

Спасибо, но он все еще не работает. Я попробовал '' 'groups.users': {$ in: req.user._id} '' и '' 'groups.users': req.user._id'', но не работал. Если я удалю эту строку из запроса, я получаю данные обратно, это просто не фильтруется 'user._id''. –

+1

Чтобы устранить сомнения относительно того, что вы пытаетесь сделать, не могли бы вы предоставить некоторые фактические примеры документов, которые выполняются и не соответствуют конкретному примеру того типа запроса, который вы хотите сделать? – wdberkeley

+0

@ChrisPaterson Похоже, что переменная 'req.user._id' - это не то, что вы ожидаете от нее. –

Смежные вопросы