如何在MongoDB中存储一个具有以$开头的键的对象

时间:2012-10-05 05:03:38

标签: mongodb

我想保存对文档所做的更改。最简单的方法是存储对文档所做的实际更改。我的意思是:

var changes = {
  $set: {
    text: 'Some text.'
  }
}

db.posts.update({
  _id: _id
}, changes)

db.changes.insert({
  postid: _id,
  changes: changes
})

但是我收到错误(有充分理由):

Error: key $set must not start with '$'

存储更改的最简单方法是什么?

或许我正在接近问题并且你有一个更好的解决方案。我希望用户能够看到人们对任何帖子或事实上的任何变化的日志。我不打算每次改变都有功能。编辑文本只是对文档进行更改的众多方法之一。

2 个答案:

答案 0 :(得分:5)

另一个有许多保留的选项是将更改日志存储为json字符串。当然,内容不会轻易搜索,但您可以保留将原始数据存储为字符串并在检索时解码json的简单性。如果您只是存储更改日志,则此方法可能有效。

db.changes.insert({   postid:_id,   更改:JSON.stringify(更改) })

答案 1 :(得分:1)

这是MongoDB中的限制。由于查询必须如何工作,因此某些保留字符中的一个为$。使用运算符时,集合中的文档与用于更新的文档之间会存在歧义。

我建议删除$符号。我会用这些词代替你试图使用的运算符:

  • 创建
  • SET
  • DELETE