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在各个领域使用这些“操作符”。因此,尝试使用$
前缀命名存储中的字段是非法的。够清楚吗?这条信息真的应该有全文。