6

次のスキーマがあります。

var ItemSchema = new Schema({
name : String
,location: {
    address: { type: String, default:''}, 
    geolocation: {longitude: Number, latitude:Number}, 
    place : {type: Schema.Types.ObjectId, ref:'Place'} 
},
ranking_in_place : Number })

Place は、名前、都市、国などのフィールドを持つ Place スキーマへの参照です。

ranking_summary の仮想を作成したい:

ItemSchema.virtual('ranking_summary').get(function() { 
    if(this.ranking_in_place <= 5){
        if(this.ranking_in_place == 1){
            return "Most popular item" + " in " + this.location.place.name 
        }
    }
})

this.location.place は参照であり、入力されていないため、this.location.place.name の値を取得できません。この値にアクセスするにはどうすればよいですか?

4

3 に答える 3

2

クエリで.populate()を呼び出すようにしましたか?そうしないと、Mongooseは参照オブジェクトをプルすることを知りません。例:

ItemModel.findOne().populate('place').exec(function (err, item) {
    console.log(item.ranking_in_place)
})
于 2013-01-14T15:27:47.530 に答える
1
Model.find().populate(path, fields, conditions, options);

したがって、使用できるオプションについては

{ sort: 'order' } // ascending
{ sort: [['order', 1 ]] } // ascending
{ sort: [['order', 'asc' ]] } // ascending
{ sort: [['order', 'desc' ]] } // ascending
{ sort: [['order', -1 ]] } // descending
{ sort: [['order', 'desc' ]] } // descending
{ sort: [['order', 'descending' ]] } // descending
于 2013-05-09T17:02:30.480 に答える