2015-10-20 3 views
0

Я пытаюсь найти определенные посещения, приходящие от посещений схемы ip.The выглядит следующим образом:Mongoose найти в массиве ссылочных поддокументов

var VisitSchema = new Schema({ 
visitId:  String, 
ip:    [{ type: Schema.Types.ObjectId, ref: 'VisitorIp' }] 
}); 
mongoose.model('Visit', VisitSchema); 

IP-схема выглядит следующим образом:

var VisitorIpSchema = new Schema({ 
ip:    String, 
country:  String 
}); 
mongoose.model('VisitorIp', VisitorIpSchema); 

когда я пытаюсь запустить обычную находку для конкретного ip:

Visit.find({ip.ip:myIp})) 
.populate('ip') 
.exec(function(err, visits){ 
    console.log(visits) 
}) 

он возвращает пустой массив. Все записи в базе данных mongo выглядят и ведут себя нормально.

Пожалуйста, помогите, у меня закончились идеи.

ответ

1

Один не очень элегантный подход, который вы можете предпринять, - это запрос после заполнения, т. Е. Получение всех посещений, заполнение ip-документов посещений с помощью фильтра запросов, и когда запрос выполняется, вам необходимо вручную отфильтровать которые не имеют документов IP, которые соответствуют критериям заполнения, например:

Visit.find({}) 
    .populate('ip', null, { "ip": myIp }) 
    .where('ip.ip').equals(myIp) /* where('ip.ip').in([myIp]) */ 
    .exec(function(err, visits){ 
     visits = visits.filter(function(doc){ 
      return visits.ip.length; 
     }) 
     // do stuff with visits 
    }); 
Смежные вопросы