MongoDB - “'fieldName”中的“美元($)前缀字段\'$$ hashKey \”。$$ hashKey \'对存储无效。'“

时间:2015-06-14 12:13:03

标签: mongodb

尝试更新文档时,我收到字段timesToDisplay的上述错误。

MongoDB版本2.6.7。

整个模型:

msg = {
          'name': '',
          'template': '',
          'displayDurInMilliSec': 0,
          'timesToDisplay': [],
          'images': [],
          'texts': [],
          'screen': []
       }

我想我会在其他3个数组字段中得到同样的错误。

我已尝试使用$set,但基本上会收到同样的错误。

代码:

function updateMessage(msg) {
    var conditions = {_id: msg._id}
      , update = { 'name': msg.name,
                   'template': msg.template,
                   'displayDurInMilliSec': msg.displayDurInMilliSec,
                   'timesToDisplay': msg.timesToDisplay,
                   'images': msg.images,
                   'texts': msg.texts,
                   'screen': msg.screen
    }

    messageModel.update(conditions, update, callback);

    function callback(err, numAffected) {
        if (!err) console.log(numAffected)
        else console.log(err)
    }
}

编辑: msg参数本身就是一个文档:

{ _id: '557d58abd54955480db6694f',
  name: 'msg99',
  timesToDisplay: [ { startDate: '2015-06-19T21:00:00.000Z',
                   '$$hashKey': 'object:214',
                    endDate: '2015-06-25T21:00:00.000Z',
                    daysOfTheWeek: [Object],
                    startTimeOfDay: '11',
                    endTimeOfDay: '13' } ],
 images: [],
 texts: [],
 screen: [ 1 ],
 '$$hashKey': 'object:54',
 displayDurInMilliSec: '40189',
 template: 'templates/Template2.html' }

1 个答案:

答案 0 :(得分:6)

使用ngRepeat或ngOptions时,AngularJS会添加$$hashkey字段。对于ngRepeat,您可以通过向其添加track by $index来更改重复字符串。要使用ngOptions,您必须自己过滤掉该字段。 AngularJS提供了一种快速解决方案:angular.toJson。这将过滤掉所有前缀为两美元符号的字段。 Check out the documentation

我意识到这不是MongoDB的答案,但是这个特定错误($$ hashkey)通常是由于AngularJS。