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

あまり洗練されていない方法の 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 に答える