node.js - 如何使用 2d 地理索引在 Mongoose 模式中正确定义数组中的对象

标签 node.js mongodb mongoose schema geo

我目前在为以下文档创建架构时遇到问题。来自服务器的响应总是将“trk”字段值返回为 [Object]。不知何故,我不知道这应该如何工作,因为我至少尝试了所有对我有意义的方法;-)

如果这有帮助,我的 Mongoose 版本是 3.6.20 和 MongoDB 2.4.7 在我忘记之前,最好也将其设置为 Index (2d)

原始数据:

{
    "_id": ObjectId("51ec4ac3eb7f7c701b000000"),
    "gpx": {
        "metadata": {
            "desc": "Nürburgring VLN-Variante",
            "country": "de",
            "isActive": true
        },
    "trk": [
    {
        "lat": 50.3299594,
        "lng": 6.9393006
    },
    {
        "lat": 50.3295046,
        "lng": 6.9390688
    },
    {
        "lat": 50.3293714,
        "lng": 6.9389939
    },
    {
        "lat": 50.3293284,
        "lng": 6.9389634
    }]
    }
}

Mongoose 架构:

var TrackSchema = Schema({
            _id: Schema.ObjectId,
            gpx: {
                metadata: {
                    desc: String,
                    country: String,
                    isActive: Boolean
                },
                trk: [{lat:Number, lng:Number}]
            }
        }, { collection: "tracks" });

Chrome 中 Network 选项卡的响应总是如下所示(这只是 trk 部分错误):

{ trk: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],

我已经为“trk”尝试了不同的架构定义:

  1. trk: Schema.Types.Mixed
  2. trk: [Schema.Types.Mixed]
  3. trk:[ { type:[Number], index: "2d"}]

希望你能帮助我;-)

最佳答案

您可以通过以下方式声明 trk :- 要么

trk : [{
    lat : String,
    lng : String
     }]

trk : { type : Array , "default": [] }

在第二种情况下,在插入过程中创建对象并将其推送到数组中,如

db.update({'Searching criteria goes here'},
{
 $push : {
    trk :  {
             "lat": 50.3293714,
             "lng": 6.9389939
           } //inserted data is the object to be inserted 
  }
});

或者你可以设置对象数组

db.update ({'seraching criteria goes here ' },
{
 $set : {
          trk : [ {
                     "lat": 50.3293714,
                     "lng": 6.9389939
                  },
                  {
                     "lat": 50.3293284,
                     "lng": 6.9389634
                  }
               ]//'inserted Array containing the list of object'
      }
});

关于node.js - 如何使用 2d 地理索引在 Mongoose 模式中正确定义数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695058/

相关文章:

javascript - Mongoose 查询 WHERE 和 OR NOT

node.js - 为什么这个 EventEmitter pubsub 单例接口(interface)不能在 Node.js 中工作?

javascript - mongoose.Schema() 和 new mongoose.Schema() 有什么区别?

node.js - 如何在谷歌云上使用nodejs虚拟机提供我的内容

python - MongoDB:如何确定特定值不存在

node.js - NodeJS + Mongoose : Updating all fields on a Mongoose model

node.js - Node 中原子性的 Redis 事务的替代方案

javascript - 不从后端数据在 html 中呈现 &amp 符号

javascript - 聚合两个数组,其中两个元素在 MongoDB 中都不为空

javascript - 过滤子文档数组,同时如果为空仍返回父数据