MongoDB-“;美元($)前缀字段\'$$hashKey\&x27;在\';fieldName"$$hashKey\&x27;对存储无效。'&引用;

MongoDB-“;美元($)前缀字段\'$$hashKey\&x27;在\';fieldName"$$hashKey\&x27;对存储无效。'&引用;,mongodb,Mongodb,在尝试更新文档时,我在timesToDisplay字段中遇到上述错误 MongoDB版本2.6.7 整个模型: msg = { 'name': '', 'template': '', 'displayDurInMilliSec': 0, 'timesToDisplay': [], 'images': [], 'texts': [], 'screen': []

在尝试更新文档时,我在
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' }

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


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

这是一条非常简单的消息。不幸的是,您没有向我们展示您自己的
msg
变量中包含的内容。这无疑是这里的问题。还有一个很糟糕的方法。您应该使用
$set
$push
以及其他操作符,这些操作符不只是在更新时“替换”整个文档。谢谢您的评论,我已经编辑了这个问题。我想我需要删除
$$hashKey
字段。您确实需要这样做。任何带有
$
的“前缀”都被视为“保留”。MongoDB在各个领域使用这些“操作符”。因此,尝试使用
$
前缀命名存储中的字段是非法的。够清楚吗?这条信息真的应该有全文。