0

我正在尝试查找来自 ip 的某些访问。访问模式如下所示:

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 数据库中的所有记录看起来和行为都正常。

请帮助我已经没有想法了。

4

1 回答 1

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
    });
于 2015-10-20T19:49:31.090 回答