【问题标题】:Mongo: Traverse error when updating object inside nested arrayMongo:更新嵌套数组中的对象时出现遍历错误
【发布时间】:2015-04-21 17:10:56
【问题描述】:

我正在尝试将嵌套数组中的对象中的 floor_num 值从 1 更新为 9000,在 Mongoose 中:

thingSchema.findById(thingID, function(err, lm) {
  if (!lm){
    console.log(err);
  }
  else {
      lm.update({'style.maps.localMapArray.map_marker_viewID': req.body.map_marker_viewID}, 
      {'$set': {
        'style.maps.localMapArray.$.floor_num': 9000,
      }
      }, function(err) {
        //update success
    });
  }
}); 

但我收到了这个 Mongo 错误:

MongoError: cannot use the part 
   (localMapArray of style.maps.localMapArray.map_marker_viewID) to traverse
   the element ({localMapArray: [ { map_marker_viewID: "acympqswmkui", 
   floor_num: 1 } ]} code: 16837

我的架构:

   var thingSchema = new Schema({
        style: {
            maps: {
                localMapArray: [{
                   map_marker_viewID : String,
                   floor_num : Number
                }],
            }
        }
   }); 

【问题讨论】:

  • 您的代码应该可以正常工作。仅当您不使用$(位置运算符。) 进行更新时才会收到错误消息。
  • 我同意。更新没问题。如果有的话,你能仔细检查一下你得到了什么错误吗?

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

这是我解决此类问题的菜鸟方法。我也是 MongoDB 和 Mongoose 的新手。

thingSchema.findById(thingID, function(err, lm) {
    if (err)
        console.log(err);

    var localMaps = lm.style.maps.localMapArray;

    for (var i = 0; i < localMaps.length; i++) {
        if (lm.style.maps.localMapArray[i].map_marker_viewId == req.body.map_marker_viewID) {
            lm.style.maps.localMapArray[i].floor_num = 9000;
        }
    }

    lm.save();
});

我希望这里的某个地方可以提供更好的 Mongoose 示例。希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 2020-07-25
    • 2022-01-14
    • 2019-02-02
    • 2021-12-28
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多