【问题标题】:Mongoose find in array of referenced subdocumentsMongoose 在引用的子文档数组中查找
【发布时间】:2016-01-19 06:05:37
【问题描述】:

我正在尝试查找来自某个 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 数据库中的所有记录的外观和行为都正常。

请帮助我的想法已经用完了。

【问题讨论】:

    标签: node.js mongodb reference mongoose subdocument


    【解决方案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
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 2020-06-11
      • 2021-06-06
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      相关资源
      最近更新 更多