考虑一个简单的mongo文档 struct :

{id,第一次,最后一次}

客户端需要插入具有已知ID的文档,或更新现有文档."lastTime"应始终设置为某个最新时间.对于"第一次",如果要插入文档,则"第一次"应设置为当前时间.但是,如果文档已经创建,则"首次"保持不变.我只想使用upserts(避免查找).

我已经爬过了http://www.mongodb.org/display/DOCS/Updating,但我不知道该如何完成这个特定的操作.

我不认为这是不合理的,有$push和$addToSet操作可以有效地在数组字段上实现这一点,只是没有任何操作可以在简单字段上实现同样的效果.就像应该有$setIf操作一样.

推荐答案

我遇到了完全相同的问题,没有简单的解决方法<;2.4然而,自从2.4开始,$setOnInsert运营者就让你做到这一点.

db.collection.update( <query>,
                      { $setOnInsert: { "firstTime": <TIMESTAMP> } },
                      { upsert: true }
                    )

更多信息请参见2.4 release notes of setOnInsert.

Mongodb相关问答推荐

数组相等条件返回的文档多于与相等匹配的文档:MongoDB

在mongdob中按子文档筛选不起作用

如何在Mongodb Mongoose Nodejs中提取不等于一组值的字段

如何在 kubernetes 中获取分片 mongodb 的备份

使用 multer 在我的 MERN 前端显示 MongoDB 图像的正确语法是什么?

MongoDB:如何将所有文档合并到聚合管道中的单个文档中

无法让 Mongoose.js 子文档数组填充

MongoDB:插入重复键更新

查找对象是否在预保存钩子mongoose中更改

如何在 mongodb 中设置整数的默认值?

MongoDB 2.1 聚合框架总和匹配名称的数组元素

在 Nodejs 中找不到模块

MongoDB 查找精确的数组匹配,但顺序无关紧要

如何使用 MongoDB 和 Mongoid 在 Rails 3 上进行适当的数据库测试 (TDD)

Ruby 按键值分组哈希

Spring Data MongoDB 中的独特之处

MongoException: Index with name: code already exists with different options

Mongo聚合框架,排序然后分组不起作用

MongoDB MapReduce - 发出一个键/一个值不调用reduce

MongoDb - 利用多 CPU 服务器进行写入繁重的应用程序