mongodb保存在数组中而不是对象中


location{0:[coordinates:{0,0}],type:"Point"}

由于某种原因,位置保存在数组中,而不是对象中。

traffic.findOneAndUpdate(
{'traffic_id':json.features[i].attributes.Id, 'object_id':json.features[i].attributes.OBJECTID},
{'location': [{coordinates:[long,lat],type:"Point"}],'Report':json.features[i].attributes.Location,'TrafficImpact':json.features[i].attributes.TrafficImpact, 'IncidentType':json.features[i].attributes.IncidentType},
{
upsert: true,new: true, setDefaultsOnInsert: true
}, function(err) {
if (err) {
console.log('ERROR when submitting traffic');
console.log(err);
}
});

我的方案是

const TrafficScheme = new mongoose.Schema({
object_id:{
type:Number,
},
traffic_id:{
type:Number,
},
Report:{
type:String,
},
TrafficImpact:{
type:String,
},
IncidentType:{
type:String,
},
Road:{
type:String,
},
EntryDate:{
type:Date,
},
UpdateDateTime:{
type:Date,
},
typeOfData:{
type:String,
default:"traffic",
},
cleared:{
type:String,
default:"false",
},
location: {
type: Object,
// index: { unique: true }
},

}, { collection: 'datafeed_beta'});


module.exports = mongoose.model('traffic', TrafficScheme);

location字段是一个数组,因为您将它作为数组传递给findOneAndUpdate函数(注意值周围的方括号(。该函数保持传递给它的值,在本例中,它包含location字段的数组。

traffic.findOneAndUpdate(
...,
{'location': [{coordinates:[long,lat],type:"Point"}], ...},
...
});

如果您希望它不是数组,请确保传递给findOneAndUpdate的值是一个对象,而不是数组:

traffic.findOneAndUpdate(
...,
{'location': {coordinates:[long,lat],type:"Point"}, ...},
...
});

最新更新