猫鼬在引用的子文档数组中查找
Mongoose find in array of referenced subdocuments
我正在尝试查找来自 ip.The 访问模式的特定访问,如下所示:
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)
})
它 returns 一个空数组。
mongo 数据库中的所有记录看起来和行为都正常。
请帮助我 运行 没有想法。
您可以采用的一种不太优雅的方法是在填充后进行查询,即获取所有访问,使用查询过滤器填充访问的 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
});
我正在尝试查找来自 ip.The 访问模式的特定访问,如下所示:
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)
})
它 returns 一个空数组。 mongo 数据库中的所有记录看起来和行为都正常。
请帮助我 运行 没有想法。
您可以采用的一种不太优雅的方法是在填充后进行查询,即获取所有访问,使用查询过滤器填充访问的 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
});