MongoDB没有okForStorage错误

Qui*_*nGB 1 javascript mongodb node.js

我看了很多关于这个错误,似乎Mongo不接受.$更新,但我仍然得到这个错误

{ [MongoError: not okForStorage]
  name: 'MongoError',
  err: 'not okForStorage',
  code: 12527,
  n: 0,
  connectionId: 18,
  ok: 1 }
Run Code Online (Sandbox Code Playgroud)

这是我正在更新的对象:

{
status: "open",
type: "item",
parentId: "4fa13ba2d327ca052d000003",
_id: "4fa13bd6d327ca052d000012",
properties: {
  titleInfo: [
   { title: "some item" }
  ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在更新它:

{
fedoraId: 'aFedoraLib:438',
status: "closed",
type: "item",
parentId: "4fa13ba2d327ca052d000003",
_id: "4fa13bd6d327ca052d000012",
properties: {
  titleInfo: [
   { title: "some item" }
  ]
  }
}
Run Code Online (Sandbox Code Playgroud)

MSp*_*eij 12

我遇到的另一个可能原因是:存储一个在字符串键中有句点的对象.

  • MongoDB在字段名称中不允许使用`.`或`$` - 它们具有特殊的语义含义.见http://docs.mongodb.org/manual/reference/limits/#naming-restrictions (2认同)

Qui*_*nGB 8

所以对于那些得到同样错误的人:这是因为我包含了_id,Mongo显然不喜欢

  • 注意:嵌入对象可以有`_id`字段.看起来这个错误可能出于几个原因.这是另一个:http://stackoverflow.com/questions/6041109/mongo-update-query-given-error (2认同)

Ben*_*tow 5

尝试使用此键值对保存JSON结构时遇到此错误(直接来自AngularJS应用程序):

 "$$hashKey":"021"
Run Code Online (Sandbox Code Playgroud)

只删除该键修复了问题.对于使用Angular的其他人来说,看起来调用Angular的内置angular.toJson客户端消除了$$ hashkey键.来自他们的论坛:

$scope.ngObjFixHack = function(ngObj) {
    var output;

    output = angular.toJson(ngObj);
    output = angular.fromJson(output);

    return output;
}
Run Code Online (Sandbox Code Playgroud)