3

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

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 '$'

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

或者,也许我处理的问题是错误的,而您有更好的解决方案。我希望用户能够看到人们对任何帖子或实际上任何内容所做的更改日志。我不会为每次更改都创建一个函数。编辑文本只是对文档进行更改的众多方法之一。

4

2 回答 2

5

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

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

于 2014-02-10T21:20:32.063 回答
1

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

我建议去掉$符号。我会改为使用这些词代替您尝试使用的运算符:

  • 创造
  • 删除
于 2012-10-05T07:08:46.190 回答