我正在尝试将location
停车Spot
存储在单个嵌入式子文档中,以获得更清晰的对象模型。对于每个新coordinates
,我希望location
Spot
为[]
默认为Spot
。
当我按如下方式创建架构时:
var LocationSchema = new Schema({
Coordinates: {
type: [Number],
index: '2dsphere'
}
})
然后将架构作为子文档嵌入Spot
:
var SpotSchema = new Schema({
location: {
type: LocationSchema,
default: LocationSchema
}
})
var Spot = mongoose.model('Spot', SpotSchema')
然后实例化一个Spot
并尝试将其coordinates
设置为[12, 34]
之类的值:
var spot = new Spot()
spot.location.coordinates = [12, 34]
从那时起我实例化的每个新Spot
都将其坐标默认为该值:
var anotherSpot = new Spot()
anotherSpot.location.coordinates //returns [12, 34]
我做错了什么?我不明白为什么修改实例的属性会修改原始模型,并扩展从它创建的每个新实例。
即使不使用子文档,也会发生完全相同的问题:
var SpotSchema = new Schema({
location: {
type: {
coordinates: [Number],
index: '2dsphere'
},
default: {
coordinates: []
}
}
})
var Spot = mongoose.model('Spot', SpotSchema')
var spot = new Spot()
spot.location.coordinates = [12, 34]
var anotherSpot = new Spot()
anotherSpot.location.coordinates //returns [12, 34]
答案 0 :(得分:0)
我认为这就是你想要的(使用你的上一个例子):
var SpotSchema = new Schema({
location: {
type : String,
coordinates : {
$type : [ Number ],
default : [],
index : '2dsphere'
},
}
}, { typeKey : '$type' })
type
在Mongoose中被“保留”;如果您需要使用该名称创建属性,则需要使用typeKey
告诉Mongoose它应该使用另一个标识符来声明属性的类型(在此示例中为$type
)。
解释here,包括对GeoJSON用法的引用。