2017-02-17 12 views
0

私はモンゴーズ人口の多い文書や記事の多くを読んでいますが、このケースではうまくいかないようですが、データが格納されたときに、 dealSchemaにはIDがありませんでした。思考?モンゴースの深い人口集計

mongoosasticを使用してelasticsearchの情報をインデックスに登録することが目標であるため、私はプラグインでpopulate paramsを渡します。

//mongoose version 4.8.0 

var dealSchema = new Schema({ 
    deal: {type: Schema.ObjectId, ref: 'Deal'}, 
    discounts: [discountSchema] 
}, {_id:false}); 


var offerSchema = new Schema({ 
    name: String, 
    description: String, 
    partner: {type: Schema.ObjectId, ref: 'Partner'}, 
    venues: [{type: Schema.ObjectId, ref: 'Venue'}], 
    deals: [dealSchema], 
    modified: Date, 
    created: Date 
}); 


//=================================================// 
mongoose.connect('mongodb://127.0.0.1:27017/production'); 
offerSchema.plugin(mongoosastic, { 
    hosts: [ 'http://127.0.0.1:9200' ], 
    index: 'myIndex', 
    type: 'offer', 
    populate: [ 
     { path: 'partner', model: 'Partner', select: 'name' }, 
     { path: 'venues', model: 'Venue', select: 'name' }, 
     { path: 'deals.deal', model: 'Deal', select: 'name' } 
    ] 
}); 

///////// indexed data in ES /////////// 
// 1. partners and venues are populated as expected, name only. 
// 2. deals.deal is not populated as intended 

{ 
    "_index": "myIndex", 
    "_type": "offer", 
    "_id": "568454a104439f0300a57e86", 
    "_score": 2.1182644, 
    "_source": { 
    "name": "offer name", 
    "description": "This is an offer.", 
    "partner": { 
     "_id": "566ddbf61e11f0030020fcc5", 
     "name": "partner one" 
    }, 
    "venues": [ 
     { 
     "_id": "566df15d1e11f00300211c13", 
     "name": "venue one" 
     }, 
     { 
     "_id": "566df2f1b6e09103003595a6", 
     "name": "venue two" 
     } 
    ], 
    "deals": [ 
     { 
     "deal": "566df755b6e091030035cbed", 
     "discounts": [ 
      { 
      "amount": 0, 
      "attribute": "566ddeff1e11f0030020fccf" 
      }, 
      { 
      "amount": 0, 
      "attribute": "566ddef91e11f0030020fcce" 
      } 
     ] 
     } 
    ], 
    "modified": "2016-05-31T23:04:55.476Z", 
    "created": "2015-12-30T22:03:13.354Z" 
    } 
} 
(OPに代わって投稿)
+0

あなたは何を得ているのか、結果として何を期待していますか?この質問は不完全だと思われる –

+0

謝罪する。私は人口が多い会場とパートナーを期待どおりに取得しています。しかし、deals.dealはちょうど私が残っています。人口とエラーなし。私は家に帰るとすぐに返信します。 – remotevision

+0

Dealのコレクションに取引が存在することは確実ですか? –

答えて

0

次のコードは動作します。再実行する前にelasticsearchインデックスを削除する必要がありました。

mongoose.connect('mongodb://127.0.0.1:27017/production'); 
    offerSchema.plugin(mongoosastic, { 
     hosts: [ 'http://127.0.0.1:9200' ], 
     index: 'myIndex', 
     type: 'offer', 
     populate: [ 
      { path: 'partner', model: 'Partner', select: 'name' }, 
      { path: 'venues', model: 'Venue', select: 'name' }, 
      { path: 'deals.deal', model: 'Deal', select: 'name' } 
     ] 
    }); 
0

このように入力すると、実際にはdeals.dealが予想どおりに移入されます。したがって、おそらくこれは宣言的に値を設定するときにmongoosastic問題です。

Offer.findOne({'_id': '568454a104439f0300a57e86'}).populate('deals.deal').exec(function(err, doc){ 
    console.log(JSON.stringify(doc)); 
}); 
関連する問題