当前位置: 首页 > 面试题库 >

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

邰昀
2023-03-14
问题内容

我目前在为下面的文档创建架构时遇到问题。服务器的响应始终将“
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
    }]
    }
}

猫鼬架构:

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

Chrome的“网络”标签中的响应始终如下所示(这只是trk-part错了):

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

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

  1. trk:Schema.Types.Mixed
  2. trk:[Schema.Types.Mixed]
  3. trk:[{类型:[数字],索引:“ 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'
      }
});


 类似资料:
  • 我有一个2D按钮数组(按钮),它将生成一个5×5的按钮网格。我想在单击时获取单个按钮的索引(例如,(2,2)在中间),并通过创建Topcenter(这将是按钮的索引(x,y-1)或1,2,其中x和y是单击按钮的值)等整数变量,在3 x 3半径内找到围绕原始按钮的按钮的索引值。)然后,我可以向周围的按钮添加文本等。 这是一个可视化: 0,0|0,1|0,2|0,3|0,4 1,0 | 1,1 | 1

  • 我已经阅读了尽可能多的关于如何在MongoDB中正确更新数组中的元素的文章(比如这篇:Mongoose,更新对象数组中的值),并认为我已经遵循了所有的建议,但我仍然犯了错误,如果有人能发现我的错误,我将非常感激,因为我已经试着调试了几个小时! 我特别遇到的问题是findOneAndUpdate调用似乎只是更新“inventureItems”数组中的第一个元素,不管它是否匹配我对特定元素的查询。 我

  • 问题内容: 我需要弄清楚如何在二维numpy数组中找到值的所有索引。 例如,我有以下2d数组: 我需要找到所有1和0的索引。 我试过了,但是并没有给我所有的索引: 基本上,它只给我每一行中的一个索引。 问题答案: 您可以用来返回x和y索引数组的元组,其中给定条件保存在数组中。 如果是阵列名称: 如果要列出(x,y)对,则可以使用两个数组: 或者,甚至更好的是,@ jme指出这可能是生成配对的一种更

  • 问题内容: 我正在为约会应用程序构建Mongoose模式。 我希望每个文档都包含对它们所经历过的所有事件的引用,其中另一个是系统中具有自己模型的架构。如何在架构中对此进行描述? 问题答案: 您可以使用 人口 来描述它 填充是用其他集合中的文档自动替换文档中指定路径的过程。我们可以填充单个文档,多个文档,普通对象,多个普通对象或查询返回的所有对象。 假设您的事件模式定义如下: 为了显示如何使用填充,

  • 根据这个答案,粗略地说,如果我们有一个学生对象的课堂对象数组,类[索引]!=学生1。我相信这是我在实现等于方法将数组[索引]对象与另一个对象进行比较时犯的错误。我相信数组[索引]和我正在比较的对象是相同的。 下面的代码显示了我的getNumStudents方法,在该方法中,我尝试计算一个学生id在一个班级中出现的次数。ID代表他或她喜欢的品牌鞋(课后练习)。这个方法在我的教室对象类中,它实现了一个

  • 问题内容: 假设采用以下架构,我尝试使用Mongoose保存一些GeoJSON数据 这就是我尝试保存文档的方式 但是,我在数据库中得到的是 看起来整个位置标签和数据都丢失了。这是定义架构的错误方法还是保存文档的错误方法? 问题答案: 当使用在嵌入式对象中命名的字段时,您需要使用一个对象来定义其类型,或者Mongoose认为您正在定义对象本身的类型。 因此,将您的架构定义更改为: