MongoDB:使用不同的值进行更新和插入
一些背景信息:我为每个用户都有一个文档,其中包含一个数组,其中包含与用户相关的最新 20 个事件。由于 MongoDB 没有此功能(限制文档内的数组),我将推送我的事件并弹出最新的事件。
我的问题:初始化文档(又名用空值填充数组)。我想原子地:
- 创建包含具有 20 个空值的数组的文档,如果文档不存在,则推送一个值
;如果文档存在,则
- 更新文档(在数组中推送一个值)
您还有其他建议吗?我想到的一个技巧是使用 :unique 和 :dropDups 声明索引,并始终进行初始化插入。
相关内容:MongoDB 固定大小数组实现
A little context: I have a document for each user that contains an array with latest 20 events related to a user. As MongoDB does not have this feature(to cap arrays inside a document), I will push my event and pop the latest one.
My problem: initializing the document(aka filling array with nulls). I want to atomically:
- create document containing an array with 20 null values and push one value, if document does not exist
or
- update document (push one value in array), if document exists
Do you have any other suggestions? A hack I thought about would be to declare a index with :unique and :dropDups, and to always make an initialization insert.
Related to: MongoDB fixed size array implementation
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在一次操作中还不可能。您需要 http://jira.mongodb.org/browse/SERVER-991 或 < a href="http://jira.mongodb.org/browse/SERVER-453" rel="nofollow">http://jira.mongodb.org/browse/SERVER-453。
Not possible in a single operation, yet. You want http://jira.mongodb.org/browse/SERVER-991 or http://jira.mongodb.org/browse/SERVER-453.
你会想尝试:
$setOnInsert
You'll want to try:
$setOnInsert