我是JSON和MongoDB Schema的新手,我正在寻找解决问题的方法。我想将userId存储为索引,然后将其位置坐标作为该索引对应的用户位置(使用geoJSON她)的值(“userId”)。
这是我的MongoDB架构。
const locationSchema = new Schema({
userId:
{
geometry: geoSchema
}
});
此外,
const geoSchema = new Schema({
type: {
type: String,
default: 'Point'
},
coordinates: {
type: [Number],
index: '2dsphere'
},
date: {
type:Date,
default:Date.now
}
});
&安培;这是我的帖子请求
{
"userId":
{
"geometry":{
"coordinates": [
1.9,
2
],
"type": "Point"
}
}
}
注意:如果我将“userId”更改为实际的userId,即12345等,它将无效。
问题是,我无法设置userId(父对象)值。我在使用Firebase API时做了这件事,但在这里我无法弄清楚如何做到这一点。 我通过这种方法看到的优点是,我可以一次又一次地存储用户的位置,对应于用户的id,而不是每次都创建将其存储为新对象。 希望我在这里有意义。
答案 0 :(得分:0)
修改强>
你想在几何对象上有一个数组,模式应该是:
{
userId: String,
geometry: [ geoSchema ]
}
然后,您可以将项目“推送”到现有对象https://docs.mongodb.com/manual/reference/operator/update/push/index.html
你的mongo查询看起来像:
db.collection.update(
{ user: "12345" },
{ $push: {
"geometry":{
"coordinates": [
1.9,
2
],
"type": "Point"
}
}
)
原始回复
您的架构中需要userId
的字段。
例如,它可以是:
{
userId: String
geometry: geoSchema
}
然后你的POST请求看起来像:
{
"userId": "12345"
{
"geometry":{
"coordinates": [
1.9,
2
],
"type": "Point"
}
}